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"]]