1.exex是正则表达式的方法,而不是字符串的方法,它的参数是字符串
res=/\d/.exec(str);
match是字符串提供的方法,它的参数是正则表达式
res=str.match(/\d/);
2.exec和match返回的都是数组。
如果执行exec方法的正则表达式没有分组(没有用括号括起来的内容),那么如果匹配,它将返回一个只有一个元素的数组,这个数组是它匹配到的第一个字符串,如果没有匹配则返回null。
var str='cat,hat';
var p=/at/; //没有g(全局属性)
alert(p.exec(str));
alert(str.match(p));
//二者返回的一样,都是 at
var str='cat,hat';
var p=/at/g; //g属性
alert(p.exec(str)); //at
alert(str.match(p)); //at at
因为exec永远只返回第一个匹配,而match在正则表达式g属性时,会返回所有的匹配。
3.exec如果找到了匹配,且包含分组,返回的数组包含多个元素,第一个元素是找到的匹配,之后的依次是该匹配的第一个、第二个。。。个分组
var str='cat2,hat8,mat6,cat3';
var p=/c(at)\d/; //查找一个at前有c,且at后有数字的元素
alert(p.exec(str));
//cat2,at
//cat2第一个匹配//at代表分组(at)
4.注意!!!match函数在满足正则表达式分组且返回一个匹配(没g)的情况下,实现与exec一样的功能。
接上面的代码
alett(str.match(p));
//cat2,at
总结:
1.g对exec没有任何影响;
2.exec 没分组 只返回一个匹配
有分组 先找到同时满足所有分组的元素,
再找分别满足各个分组的的元素,
把找到的元素都返回。
3.match 没g没分组 只返回第一个匹配元素;
没g有分组 与exec有分组相同;
有g有分组 返回找到所有同时满足所有分组的元素。
经典案例
var str='web2.0,net2.0';
var res=/(\w+)(\d)\.(\d)/; //web2.0 , web , 2 , 0
var res2=/(\w+)(\d)\.(\d)/g; //web2.0 , net2.0