国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

JS經典正則表達式筆試題匯總

2024-05-06 16:33:41
字體:
來源:轉載
供稿:網友

本文實例總結了JS經典正則表達式筆試題。分享給大家供大家參考,具體如下:

一.復習字符串的傳統操作

如何獲取一個字符串中的數字字符,并按數組形式輸出,如

dgfhfgh254bhku289fgdhdy675gfh

輸出[254,289,675]

分析:循環用charAt()的方法獲取到每一個子字符串,判斷他是不是在0~9之間,是就把他扔到準備好的數組里

var str="dgfhfgh254bhku289fgdhdy675gfh";findNum(str);function findNum(){  var arr=[];  for(var i=0;i<str.length;i++){    if(str.charAt(i)<='9'&&str.charAt(i)>='0'){      arr.push(str.charAt(i));      alert(arr);    }  }}

但是這樣會輸出[2,5,4,2,8,9,6,7,5]和我們想要的結果有點偏差,于是我們需要一個新的空的字符串,每次碰到是數字走if,碰到字符走else,走else的時候把之前那些數字存放到新的空的字符串里,然后通過push添加到數組,然后清空字符串,一以便下次重新存放

var str="dgfhfgh254bhku289fgdhdy675";findNum(str);function findNum(){  var arr=[];  var result="";  for(var i=0;i<str.length;i++){    if(str.charAt(i)<='9'&&str.charAt(i)>='0'){      result+=str.charAt(i);    //注意添加方向不要反了    }    else{      if(result){        arr.push(result);        result="";      }    }  }  alert(arr)}

還有個隱患:如果最后以數字結尾,則最后不會進入else,最后幾位數字會讀不到,因此for循環外面再添加一遍else里面的if循環

二.什么是正則,有什么用

正則:也叫做規則,讓計算機能夠讀懂人類的規則

*前端哪些地方用到正則?

比如注冊頁面輸入用戶名,我們給定一套規則,判斷他輸入的對不對

*范圍?

正則都是用來操作字符串的(即不要用他去操作對象什么的)

*怎么寫?

正則也是一個系統對象,跟數組、json一樣,也有個寫法規則

簡寫   var re=//;  //只寫兩斜杠,瀏覽器會認為是注釋,所以盡量不要給他為空,注意兩斜杠之間不要有引號

全稱   var re=new RegExp();  //Reg是正則的簡寫,Exp是表達式的簡寫

大部分情況用簡寫,只有一種情況用全稱寫法:正則需要傳參的時候

注:全稱寫法用到/時,需要兩個//,否則是轉義字符

三.正則表達式的常用方法

1.test

正則去匹配字符串,如果匹配成功就返回真,匹配失敗就返回假

寫法:正則.test(字符串)

如:

var str='abcdef';var re=/b/; //bc一個整體也在字符串中,彈出true,但是寫bd,彈出false,因為字符串中沒有bd這么一個整體alert(re.test(str));

彈出true

擴展:

檢測一個字符串是不是全是數字

var str='8621t56461';var re=//;if(re.test(str)){  alert("不全是數字");}else{  alert("全是數字");}

兩斜杠之間要寫什么呢?引入轉義字符

/s(/S):空格(非空格)

/d(/D):數字(非數字)

/w(/W):字符(非字符)   字符包括字母、數字、下劃線

2.search

正則去匹配字符串,如果匹配成功,就返回匹配成功的位置,如果匹配失敗就返回-1

search的寫法:字符串.search(正則)

如:

var str="abcdef";var re=/b/;alert(str.search(re));//返回1var re=/w/;//返回-1var re=/B/;//返回-1

正則中的默認:是區分大小寫的

如果要不區分大小寫,在正則的最后加標識i

var re=/B/i

完整寫法:

var re=new RegExp("B","i");

3.match

正則去匹配字符串,如果匹配成功,就返回匹配成功的數組,如果匹配不成功,就返回null

match的寫法:字符串.match(正則)

比如上面例子要找出數字

var str="dgfhfgh254bhku289fgdhdy675";var re=//d/;alert(str.match(re));//輸出2

為什么后面的不找了?

正則默認:正則匹配成功就會結束,不會繼續匹配

如果想要全部查找,就要加標識g(全局匹配)

var re=//d/g;//輸出2,5,4,2,8,9,6,7,5

跟我們想要的結果還是有偏差,如果要連著找到,而不是一個個分開,則需要

var re=//d/d/g;  //兩個兩個找var re=//d/d/d/g; //三個三個找

但是個數不一定時怎么找,引進量詞

量詞:匹配不確定的位置

+:至少出現一次

var re=//d+/g;

就實現上面的效果了

4.replace

正則去匹配字符串,匹配成功的字符去替換新的字符串

replace的寫法:字符串.replace(正則,新的字符串)

如:

var str="aaa";var re=/a/;str=str.replace(re,"b");alert(str);//輸出baa

敏感詞過濾例子

str.replace(re,"*");

但是如果有很多詞要過濾,不能寫成一整段,這樣匹配不到,怎樣把一個詞一個詞分開呢

|:或的意思

新的問題:所有敏感詞都會替換成一顆星,怎樣做到幾個字幾顆星呢?

replace()的第二個參數,可以是字符串,可以是回調函數

str.replace(re,function(){  return '*';});

現在和上面那句話作用一樣

回調函數的第一個參數,就是匹配成功的字符,即可以通過第一個參數的長度,來給他返回幾顆星

str.replace(re,function(str){  var result='';  for(var i=0;i<str.length;i++){    result+='*';  }  return result;});

四.正則表達式字符類

字符類:一組相似的元素(用[]表示[]的整體代表一個字符,()是分組和子項的意思)

1.任意字符

[abc]

如o[usb]t--obt、ost、out

2.范圍

[a-z]、[0-9]

如id[0-9]--id0、id5

3.排除

[^a]

如o[^0-9]t--oat、o?t、o t

例子:過濾標簽

過濾掉<>(如<div>、</div>、<h2 class="sfsdf">)

var re=/<[/w/W]+>/g;  //中括號里是或的關系,也就是字符或非字符都有了,包括了斜杠,引號等

另一種做法:    var re=/<[^>]+>/g;

五.正則表達式轉義字符

.(點):任意字符       /.:真正的點

/s(/S):空格(非空格)

/d(/D):數字(非數字)

/w(/W):字符(非字符)   字符包括字母、數字、下劃線

/數字:重復子項(/1:重復的第一個子項,/2:重復的第二個子項...)

var str="abca";var re=/(a)(b)(c)/1/ ; //true,為什么不用var re=/(a)(b)(c)/a/ ;一樣能匹配成功,/數字,用于不確定的子項字符var re=/(a)(b)(c)/2/ ; //falsealert(re.teat(str));

例子:找某個字符串中出現最多的字符和它一共出現多少次

var str="vbbbbhybbfhbbgbbb";var arr=str.split("");str=arr.sort().join("");var value=""; //存放出現最多的字符var index=0; //存放次數var re=/(/w)/1+/g;

沒有/1,re就是一整個排好序的字符串,有了/1就是出現過的有重復的取出來像這樣bbb...,hh

str.replace(re,function($0,$1){ //$0代表整體,$1代表第一個子項  if(index<$0.length){ //$0:每一組重復的元素    index=$0.length;    value=$1;  }})alert('出現最多的字符是'+value+',出現次數是'+index);

/b(/B):獨立的部分(非獨立的部分)  獨立的部分(起始、結束、空格)

如:

var str="onetwo";var re=//bone/;  //起始位置,truevar re=/one/b/;  //false,要true,one和two之間加空格或者只有onealert(re.test(str));

獨立部分應用舉例

之前有用到用封裝好的函數來獲取className

function getByClass(oparent,sClass){  var aEle=oparent.getElementsByTagName("*");  var aResult=[];  var i;  for(i=0;i<aEle.length;i++){    if(aEle[i].className==sClass){      aResult.push(aEle[i]);    }  }  return aResult;};

這個會有bug

<div class="box1"></div><div class="box1box2"></div><div class="box1 box2"></div>

用這個方法獲取box1,只能獲取到第一個

用正則來改寫

function getByClass(oparent,sClass){  var aEle=oparent.getElementsByTagName("*");  var aResult=[];  var i;  var re=new RegExp('//b'+sClass+'//b')  for(i=0;i<aEle.length;i++){    if(re.test(aEle[i].className)){      aResult.push(aEle[i]);    }  }  return aResult;};

六.量詞

不確定的字符個數

量詞:{}

{4,7}   最少出現4次,最多出現7次

{4,}     最少出現4次

{4}      正好出現4次

+是{}的簡寫,相當于(1,)

? 相當于{0,1}    //出現0次或者1次

* 相當于{0,}     //至少出現0次,可以沒有

七.正則收尾

^:正則的最開始位置,表示起始的意思

$:正則的最后,表示結束的意思

例子:去掉字符串里的空格

var re=/^/s+|/s+$/g;str.replace(re,"");

例子:檢測郵箱

var re=/^/w+@[a-z0-9]+(/.[a-z]+){1,3}$/;

八.前向聲明和反前向聲明

(?=) :前向聲明

(?!):反前向聲明

舉例

var str="abacad";var re=/a(?=b)/g;str=str.replace(re,"*");alert(str);

輸出:*bacad

如果改為

var re=/a(?!b)/g;

輸出:ab*c*d

希望本文所述對大家JavaScript程序設計有所幫助。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 房山区| 浦北县| 文山县| 沙湾县| 达拉特旗| 保德县| 遂平县| 绥棱县| 岱山县| 诏安县| 山东省| 义乌市| 武陟县| 高安市| 祁东县| 保德县| 英德市| 双辽市| 和静县| 元阳县| 宁城县| 桂平市| 武威市| 清水河县| 湘潭市| 龙山县| 黔江区| 夏河县| 儋州市| 神池县| 瑞安市| 光泽县| 西贡区| 郸城县| 都昌县| 大埔区| 吉木乃县| 宁夏| 洪湖市| 岑溪市| 岑溪市|