首页 > 代码库 > string.match(RegExp) 与 RegExp.exec(string) 深入详解

string.match(RegExp) 与 RegExp.exec(string) 深入详解

string.match(RegExp) 与 RegExp.exec(string) 相同点与不同点对比解析:

1. 这两个方法,如果匹配成功,返回一个数组,匹配失败,返回null。

2. 当RegExp的global属性为false时,这两个方法的返回数组是一样的。

数组的第0个元素是整个pattern的第一个匹配字符串,接下来的元素是pattern第一个匹配中的子匹配字符串。

  此外,数组还有index和input两个额外属性,index是匹配字符串的起始位置,input是整个输入字符串。

  此时,RegExp的lastIndex属性一直是0。

实例01(不带全局变量g):

 1 <script type="text/JavaScript"> 2  3 var str="this is a string"; 4  5 var reg=/\b\w*(i)s\b/; 6  7 var rm=str.match(reg); 8  9 var re=reg.exec(str);10 11 document.write("string.match(RegExp)测试结果:<br\>");12 13 document.write("string.match(RegExp)返回数组:"+rm+"<br\>");14 15 document.write("string.match(RegExp).index:"+rm.index+"<br\>");16 17 document.write("string.match(RegExp).input:"+rm.input+"<br\>");18 19 document.write("===============================<br\>");20 21 document.write("RegExp.exec(string)测试结果:<br\>");22 23 document.write("RegExp.exec(string)返回数组:"+re+"<br\>");24 25 document.write("RegExp.exec(string).index:"+re.index+"<br\>");26 27 document.write("RegExp.exec(string).input:"+re.input+"<br\>");28 </script>
代码01

3. 当RegExp的global属性为true时,返回的数组是不同的。

  match()方法返回的数组包含着所有匹配字符串,没有子匹配字符串和额外属性。此时,lastIndex属性无效。

  exec()方法返回的数组格式与global为false时一样,只是此时RegExp的lastIndex属性有效,匹配是从lastIndex所指示的字符开始的,并且方法执行后会将lastIndex置为本次匹配

  字符串的下一个字符处,所以循环执行exec方法时会依次匹配整个字符串,直到字符串最后返回null,并将lastIndex置0。

string.match(RegExp) 与 RegExp.exec(string) 深入详解