探究js正则匹配方法:match和exec
2015-03-12 15:55
696 查看
match是字符串方法,写法为:str.match(reg)
exec是正则表达式方法,写法为:reg.exec(str)
match和exec在匹配成功时返回的都是数组,在没有匹配上时返回的都是null,故在没有深入了解两者的使用规则前,会误以为两者的使用效果是一样的,下面在几种情况中对match和exec进行区分。
1、全局匹配:
当不使用全局匹配时,两者的匹配效果是一样的,仅返回第一次匹配成功的结果:
当使用全局匹配时,两者的匹配结果出现区别:
a、全局匹配时,match会返回所有匹配上的内容;而exec仅匹配单次匹配上的内容
b、全局匹配且进行多次匹配时,exe会从上次匹配结束的下一位开始匹配,返回本次匹配上的内容,直至无可以匹配的内容,返回null
2、分组:
无全局匹配分组时,match和exec返回结果相同。由于正则表达式采用了括号分组,所以在返回匹配结果的同时,依次返回该结果的所有分组:
全局匹配分组时,match和exec返回结果不同。match会返回所有匹配到的结果;而exec会返回本次匹配到的结果,若表达式中出现分组,则会依次返回本次匹配的全部分组:
exec是正则表达式方法,写法为:reg.exec(str)
match和exec在匹配成功时返回的都是数组,在没有匹配上时返回的都是null,故在没有深入了解两者的使用规则前,会误以为两者的使用效果是一样的,下面在几种情况中对match和exec进行区分。
1、全局匹配:
当不使用全局匹配时,两者的匹配效果是一样的,仅返回第一次匹配成功的结果:
var s = "aaa bbb ccc"; var reg = /\b\w+\b/;//没有g var rs_match = s.match(reg); var rs_exec = reg.exec(s); console.log("match:",rs_match); console.log("exec:",rs_exec);
当使用全局匹配时,两者的匹配结果出现区别:
var s = "aaa bbb ccc"; var reg = /\b\w+\b/g;//有g var rs_match1 = s.match(reg); var rs_match2 = s.match(reg); var rs_exec1 = reg.exec(s); var rs_exec2 = reg.exec(s); console.log("match1:",rs_match1); console.log("match2:",rs_match1); console.log("exec1:",rs_exec1); console.log("exec2:",rs_exec2);
a、全局匹配时,match会返回所有匹配上的内容;而exec仅匹配单次匹配上的内容
b、全局匹配且进行多次匹配时,exe会从上次匹配结束的下一位开始匹配,返回本次匹配上的内容,直至无可以匹配的内容,返回null
2、分组:
无全局匹配分组时,match和exec返回结果相同。由于正则表达式采用了括号分组,所以在返回匹配结果的同时,依次返回该结果的所有分组:
var s = "aaa1 bbb2 ccc3"; var reg = /\b(\w+)(\d{1})\b/;//两个分组,无g var rs_match1 = s.match(reg); var rs_match2 = s.match(reg); var rs_exec1 = reg.exec(s); var rs_exec2 = reg.exec(s); console.log("match1:",rs_match1); console.log("match2:",rs_match1); console.log("exec1:",rs_exec1); console.log("exec2:",rs_exec2);
全局匹配分组时,match和exec返回结果不同。match会返回所有匹配到的结果;而exec会返回本次匹配到的结果,若表达式中出现分组,则会依次返回本次匹配的全部分组:
var s = "aaa1 bbb2 ccc3"; var reg = /\b(\w+)(\d{1})\b/g; var rs_match1 = s.match(reg); var rs_match2 = s.match(reg); var rs_exec1 = reg.exec(s); var rs_exec2 = reg.exec(s); var rs_exec3 = reg.exec(s); var rs_exec4 = reg.exec(s); console.log("match1:",rs_match1); console.log("match2:",rs_match1); console.log("exec1:",rs_exec1); console.log("exec2:",rs_exec2); console.log("exec3:",rs_exec3); console.log("exec4:",rs_exec4);
相关文章推荐
- JS中正则匹配的3个方法:match,exec,test
- js正则表达式中test,exec,match方法的区别说明
- js正则表达式中test,exec,match方法的区别说明
- js正则表达式中test,exec,match方法的区别说明
- Js 正则表达式对象(方法:exec、test、match、search)
- 蛙蛙请教:js里的match方法和exec方法的区别,关于正则表达式的
- js正则表达式中test,exec,match方法的区别说明
- js正则表达式中test,exec,match方法的区别
- [从codewars学习到的JS系列2]正则表达式中的exec()与字符串的match()方法区别
- js正则表达test、exec和match的区别
- 正则表达式之匹配——match()方法
- js中exec,test,match,search,split等方法的使用
- js 中test,exec,match方法
- js正则表达exec与match的区别说明
- js的正则test,match,exec详细解析
- 关于js的正则 test,match,exec
- js正则表达式的几个匹配方法
- JS正则中的match与exec使用说明
- 正则表达式中 test、exec、match 方法区别
- javascript中的正则匹配函数exec(),test(),match()