1.match是字符串的方法,exec是正則對象實例的方法
var s='我的世界1234567abcdefg'; var result=s.match(/\d/); console.log(result);//返回一個數組,數組長度為1,包含匹配到的項,另外還有index和input屬性 var s='我的世界1234567abcdefg'; var result=/\d/.exec(s); console.log(result);//結果同string.match(reg)
2.正則表達式中沒有子表達式,且非全局匹配(沒有修飾符g),match和exec結果一樣都是返回數組如上方第一點
3.正則表達式中含有子表達式,且非全局匹配,match和exec結果一致
var s='abc,bbc,cbc,dbc'; var result=/(\w)bc/.exec(s); console.log(result);
var result2=s.match(/(\w)bc/); console.log(result2); //['abc','bc'],返回長度為2的數組,第一項時匹配項,第二項是子表達式捕獲項,包含屬性,index和input,index是匹配項開始的下標
4.正則表達式中沒有子表達式,全局匹配。match返回所有匹配項組成的數組,exec返回一個匹配項的數組
var s='abc,bbc,cbc,dbc'; var result=/\wbc/g.exec(s); console.log(result); //['abc'],index為0,input為'abc,bbc,cbc,dbc' var result2=s.match(/\wbc/g); console.log(result2); //['abc','bbc','cbc','dbc']
5.正則表達式中有子表達式,全局匹配。match返回所有匹配項組成的數組,忽略子表達式的捕獲項,exec忽略全局匹配。
var s='abc,bbc,cbc,dbc'; var result=/(\w)bc/g.exec(s); console.log(result); //['abc','a'],index為0,input為'abc,bbc,cbc,dbc' var result2=s.match(/(\w)bc/g); console.log(result2); //['abc','bbc','cbc','dbc']
6.exec適合用於循環匹配,雖然全局匹配和非全局的返回值一樣,但使用exec循環時,必須要加修飾符g
var s='abc,bbc,cbc,dbc'; var reg=/(\w)bc/g; //循環匹配時,要先將正則表達式定義好,不然每次都是一個新的正則對象,影響lastIndex的變化 //一定要加修飾符g,lastIndex是匹配項后面的下標,是下一次匹配的開始下標 //當 exec() 再也找不到匹配的文本時,它將返回 null,並把 lastIndex 屬性重置為 0 var resultArr=[]; while(result=reg.exec(s)){ console.log("lastIndex: "+reg.lastIndex); //lastIndex: 3 //lastIndex: 7 //lastIndex: 11 //lastIndex: 15 resultArr.push(result); } console.log(JSON.stringify(resultArr));//[["abc","a"],["bbc","b"],["cbc","c"],["dbc","d"]]