作家
登录

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

作者: 来源:www.28hudong.com 2013-03-30 00:13:11 阅读 我要评论

1. 这两个方法,如果匹配成功,返回一个数组,匹配失败,返回null。 2. 当RegExp的global属性为false时,这两个方法的返回数组是一样的。   数组的第0个元素是整个pattern的第一个匹配字符串,接下来的元素是pattern第一个匹配中的子匹配字符串。   此外,数组还有index和input两个额外属性,index是匹配字符串的起始位置,input是整个输入字符串。   此时,RegExp的lastIndex属性一直是0。 demo: 复制代码 代码如下: var s = 'this is a string'; var p = /bw*(i)sb/; var rm = s.match(p); var re = 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: this is a string ---------------------------- exec_array: ["this","i"] exec_array_index: 0 exec_array_input: this is a string 3. 当RegExp的global属性为true时,返回的数组是不同的。   match方法返回的数组包含着所有匹配字符串,没有子匹配字符串和额外属性。此时,lastIndex属性无效。   exec方法返回的数组格式与global为false时一样,只是此时RegExp的lastIndex属性有效,匹配是从lastIndex所指示的字符开始的,并且方法执行后会将lastIndex置为本次匹配字符串的下一个字符处,所以循环执行exec方法时会依次匹配整个字符串,直到字符串最后返回null,并将lastIndex置0。 demo: 复制代码 代码如下: var s = 'this is a string'; var p = /bw*(i)sb/g; var rm = s.match(p); var re; 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: this is a string regexp_lastIndex: 4 ---------------------------- exec_array: ["is","i"] exec_array_index: 5 exec_array_input: this is a string 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方法中是有效的,其他地方是无效的。

  推荐阅读

  解决ExtJS在chrome或火狐中正常显示在ie中不显示的浏览器兼容问题

用ExtJS开发将近一年了,也遇到了很多奇怪的问题,印象最深的要算是ExtJS在ie中显示的问题了。由于开发过程中大多用chrome来调试,很少在ie中调试(现在两者都要兼顾),导致最后在ie中页面不能正常加载,当时那个>>>详细阅读


本文标题:javascript 中String.match()与RegExp.exec()的区别说明

地址:http://www.17bianji.com/kaifa2/JS/22530.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)