zl程序教程

您现在的位置是:首页 >  前端

当前栏目

javascript中String.match()与RegExp.exec()的区别说明

JavaScript string 说明 区别 match exec REGEXP
2023-06-13 09:14:43 时间
1.这两个方法,如果匹配成功,返回一个数组,匹配失败,返回null。
2.当RegExp的global属性为false时,这两个方法的返回数组是一样的。

  数组的第0个元素是整个pattern的第一个匹配字符串,接下来的元素是pattern第一个匹配中的子匹配字符串。
  此外,数组还有index和input两个额外属性,index是匹配字符串的起始位置,input是整个输入字符串。
  此时,RegExp的lastIndex属性一直是0。
demo:
复制代码代码如下:

vars="thisisastring";
varp=/\b\w*(i)s\b/;
varrm=s.match(p);
varre=p.exec(s);
console.log("match_array:"+JSON.stringify(rm));
console.log("match_array_index:"+rm.index);
console.log("match_array_input:"+rm.input);
console.log("----------------------------");
console.log("exec_array:"+JSON.stringify(re));
console.log("exec_array_index:"+re.index);
console.log("exec_array_input:"+re.input);

显示结果为(firefox控制台):
复制代码代码如下:

match_array:["this","i"]
match_array_index:0
match_array_input:thisisastring
----------------------------
exec_array:["this","i"]
exec_array_index:0
exec_array_input:thisisastring

3.当RegExp的global属性为true时,返回的数组是不同的。
  match方法返回的数组包含着所有匹配字符串,没有子匹配字符串和额外属性。此时,lastIndex属性无效。
  exec方法返回的数组格式与global为false时一样,只是此时RegExp的lastIndex属性有效,匹配是从lastIndex所指示的字符开始的,并且方法执行后会将lastIndex置为本次匹配字符串的下一个字符处,所以循环执行exec方法时会依次匹配整个字符串,直到字符串最后返回null,并将lastIndex置0。
demo:
复制代码代码如下:
vars="thisisastring";
varp=/\b\w*(i)s\b/g;
varrm=s.match(p);
varre;
console.log("match_array:"+JSON.stringify(rm));
console.log("match_array_index:"+rm.index);
console.log("match_array_input:"+rm.input);
while(re=p.exec(s)){
console.log("----------------------------");
console.log("exec_array:"+JSON.stringify(re));
console.log("exec_array_index:"+re.index);
console.log("exec_array_input:"+re.input);
console.log("regexp_lastIndex:"+p.lastIndex);
}
console.log("----------------------------");
console.log("exec_array:"+re);
console.log("regexp_lastIndex:"+p.lastIndex);

结果:
复制代码代码如下:
match_array:["this","is"]
match_array_index:undefined
match_array_input:undefined
----------------------------
exec_array:["this","i"]
exec_array_index:0
exec_array_input:thisisastring
regexp_lastIndex:4
----------------------------
exec_array:["is","i"]
exec_array_index:5
exec_array_input:thisisastring
regexp_lastIndex:7
----------------------------
exec_array:null
regexp_lastIndex:0

综上:

1.在没有g标识符时,match和exec方法效果是一样的;有g标识符时,exec方法可以提供最完整的匹配结果。
2.这里顺便提一下RegExp.test()方法,它是exec方法的简化版,有匹配结果就返回true,没有匹配结果就返回false,执行过程与exec是一样的。相当于(p.exec(s)!=null)。
3.RegExp的lastIndex属性在有g标识符,且在exec和test方法中是有效的,其他地方是无效的。