【javascript】Regexmatch、exec和test的使用

來源:互聯網
上載者:User

標籤:png   個數   als   i++   images   regex   有一個   結束   結果   

Regexmatch、exec和test的使用

match和exec在匹配成功時返回的都是數組,在沒有匹配上時返回的都是null;test在匹配成功是返回true,在沒有匹配時返回的是false。match是String的方法,而test和exec是RegExp的方法。本文探討的是全域匹配與分組匹配的問題,並有源碼附著。

一、全域匹配

1.Regex可以使用RegExp對象定義,也可以使用常量運算式定義。

var regexp=new RegExp(/\w+/gi); 或者var regexp=/w+/gi;

2.(1)當不使用全域變數的時候,match與exec的方法是一樣的,每次都是對需要匹配的字串進行第一次匹配。

1    var re = new RegExp(/([a-z]+)=(\d+)/i);  2    var str = "cs=2013 kd=2015";3    document.write("exec:"+re.exec(str)+"<br />");4    document.write("match:"+str.match(re)+"<br />");5    document.write("test:"+re.test(str)+"<br />"); 6    document.write("<br /><br />"); 7    document.write("exec:"+re.exec(str)+"<br />");8    document.write("match:"+str.match(re)+"<br />");9    document.write("test:"+re.test(str)+"<br />"); 

結果輸出:

(2)當使用全域變數的時候,exec與match不一樣。exec每次執行都是從上一次執行結束之後的位置繼續執行所以不一樣,而match每次執行的結果都是一樣的。

1    var re = new RegExp(/([a-z]+)=(\d+)/gi);  2    var str = "cs=2013 kd=2015";3    document.write("exec:"+re.exec(str)+"<br />");4    document.write("match:"+str.match(re)+"<br />");5    document.write("test:"+re.test(str)+"<br />"); 6    document.write("<br /><br />"); 7    document.write("exec:"+re.exec(str)+"<br />");8    document.write("match:"+str.match(re)+"<br />");9    document.write("test:"+re.test(str)+"<br />"); 

 結果輸出:

二、分組

無全域匹配分組時,match和exec返回結果相同。由於Regex採用了括弧分組,所以在返回匹配結果的同時,依次返回該結果的所有分組。exec得到的結果與match得到的結果不一樣,match將所有匹配到的結果一次性存入數組當中返回,而exec按照順序進行匹配,所以需要使用while迴圈進行一次輸出。對exec返回結果進行數組下標訪問的結果是每一個完整匹配都會返回一個數組,依次為該匹配到的 [完整序列,子序列1,子序列2,。。。,子序列n],所有exec[0]是完整序列,只有的全都是括弧內的()子序列。在此範例中,exec比match效果更為好,在於可以exec對等號兩邊直接劃分,即:exec[1]=exec[2],可以直接存取到。而match更為麻煩些,可以通過match[0].split("=")將兩個序列分開,而match[0][0]只是擁有一個字母,並不是實際當中的語義塊。

 1 var str = "?id=21&rid=4&page=5"; 2 var regexp=/([a-z]+)=(\d+)/ig; 3 var match = str.match(regexp); 4  5 for(var k=0;k<match.length;k++){ 6     document.write(match[k]+"<br/>"); 7 } 8 document.write("<br /><br /><br /><br />"); 9 10 var i=1; 11 while(exec= regexp.exec(str)){12     document.write("第"+i+"次:"+exec+":"+exec[0]+"---->"+exec[1]+"<br/>");13     i++;14 } 

結果

 

【javascript】Regexmatch、exec和test的使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.