Open semi-xi opened 3 years ago
两者调用方式是不一样的,一个是字符串调用,一个是正则表达式调用 string.match(regexp) regexp.exec(string);
两者都是返回数组,
如果执行exec的时候没有分组(即没有用括号括住表达式的一部分),如果有匹配的时候,数组的唯一值就是这个匹配的第一个串,如果没有则返回null
var str= "cat,hat" ; var p=/at/; //没有g属性 alert(p.exec(str)) alert(str.match(p)) 都是"at"。在这种场合下exec等价于match。
但是当正则表达式增加了全局匹配属性(g),那样就会有差异
var str= "cat,hat" ; var p=/at/g; //注意g属性 alert(p.exec(str)) alert(str.match(p)) 分别是 "at" "at,at"。
exec永远只会返回第一个匹配,而match设置了g属性的时候,会返回所有
exec如果找到了匹配,并且包含分组的话返回的数组将会包含多个元素,第一个是匹配的元素,之后的话都是分组的元素
如下的代码将弹出"cat2,at": var str= "cat2,hat8" ; var p=/c(at)\d/; alert(p.exec(str)) 其中第一个元素是匹配的字符串"cat2",之后的元素是括号中匹配的"at"。
match函数在满足如下条件下将越俎代庖,实现和exec一样的功能
var str= "cat2,hat8" ; var p=/c(at)\d/; alert(p.exec(str)) alert(str.match(p))
彻底领悟javascript中的exec与match方法
调用方式
两者调用方式是不一样的,一个是字符串调用,一个是正则表达式调用 string.match(regexp) regexp.exec(string);
返回
两者都是返回数组,
正则表达式没有分组
如果执行exec的时候没有分组(即没有用括号括住表达式的一部分),如果有匹配的时候,数组的唯一值就是这个匹配的第一个串,如果没有则返回null
但是当正则表达式增加了全局匹配属性(g),那样就会有差异
exec永远只会返回第一个匹配,而match设置了g属性的时候,会返回所有
正则表达式有分组
exec如果找到了匹配,并且包含分组的话返回的数组将会包含多个元素,第一个是匹配的元素,之后的话都是分组的元素
特殊情况
match函数在满足如下条件下将越俎代庖,实现和exec一样的功能
参考
彻底领悟javascript中的exec与match方法