探究js正則匹配方法:match和exec


  match是字符串方法,寫法為:str.match(reg)

  exec是正則表達式方法,寫法為:reg.exec(str)

  match和exec在匹配成功時返回的都是數組,在沒有匹配上時返回的都是null,故在沒有深入了解兩者的使用規則前,會誤以為兩者的使用效果是一樣的,下面在幾種情況中對match和exec進行區分。

1、全局匹配:

  當不使用全局匹配時,兩者的匹配效果是一樣的,僅返回第一次匹配成功的結果:

var s = "aaa bbb ccc";
var reg = /\b\w+\b/;//沒有g
var rs_match = s.match(reg);
var rs_exec = reg.exec(s);
console.log("match:",rs_match);
console.log("exec:",rs_exec);

  當使用全局匹配時,兩者的匹配結果出現區別:

var s = "aaa bbb ccc";
var reg = /\b\w+\b/g;//有g
var rs_match1 = s.match(reg);
var rs_match2 = s.match(reg);
var rs_exec1 = reg.exec(s);
var rs_exec2 = reg.exec(s);
console.log("match1:",rs_match1);
console.log("match2:",rs_match1);
console.log("exec1:",rs_exec1);
console.log("exec2:",rs_exec2);

  a、全局匹配時,match會返回所有匹配上的內容;而exec僅匹配單次匹配上的內容

     b、全局匹配且進行多次匹配時,exe會從上次匹配結束的下一位開始匹配,返回本次匹配上的內容,直至無可以匹配的內容,返回null

  

 

2、分組:

  無全局匹配分組時,match和exec返回結果相同。由於正則表達式采用了括號分組,所以在返回匹配結果的同時,依次返回該結果的所有分組:

var s = "aaa1 bbb2 ccc3";
var reg = /\b(\w+)(\d{1})\b/;//兩個分組,無g
var rs_match1 = s.match(reg);
var rs_match2 = s.match(reg);
var rs_exec1 = reg.exec(s);
var rs_exec2 = reg.exec(s);
console.log("match1:",rs_match1);
console.log("match2:",rs_match1);
console.log("exec1:",rs_exec1);
console.log("exec2:",rs_exec2);

  全局匹配分組時,match和exec返回結果不同。match會返回所有匹配到的結果;而exec會返回本次匹配到的結果,若表達式中出現分組,則會依次返回本次匹配的全部分組:

var s = "aaa1 bbb2 ccc3";
var reg = /\b(\w+)(\d{1})\b/g;
var rs_match1 = s.match(reg);
var rs_match2 = s.match(reg);
var rs_exec1 = reg.exec(s);
var rs_exec2 = reg.exec(s);
var rs_exec3 = reg.exec(s);
var rs_exec4 = reg.exec(s);
console.log("match1:",rs_match1);
console.log("match2:",rs_match1);
console.log("exec1:",rs_exec1);
console.log("exec2:",rs_exec2);
console.log("exec3:",rs_exec3);
console.log("exec4:",rs_exec4);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM