js正则匹配方法:match和exec

本文详细对比了JavaScript中字符串方法match和正则表达式方法exec在全局匹配和分组情况下的差异。在全局匹配时,match返回所有匹配项,而exec仅返回单次匹配项,且在后续调用中从上次匹配结束处开始。在分组处理上,两者在无全局匹配时结果相同,但在全局匹配下,match会返回所有分组匹配的结果,exec则仅返回当前匹配的分组。
摘要由CSDN通过智能技术生成

match是字符串方法,写法为:str.match(reg)

exec是正则表达式方法,写法为:reg.exec(str)

一 相同点
  match和exec在匹配成功时返回的都是数组,在没有匹配上时返回的都是null

二 不同点
1、全局匹配:
  当不使用全局匹配时,两者的匹配效果是一样的,仅返回第一次匹配成功的结果:

var s = "ha he ha";
var reg = /h[ae]/; // 没有g
var match = s.match(reg);
var exec = reg.exec(s);
console.log(match); // [ "ha" ]
console.log(exec); // [ "ha" ]

当使用全局匹配时,两者的匹配结果出现区别:

var s = "ha he ha";
var reg = /h[ae]/g;//有g
var match1 = s.match(reg);
var match2 = s.match(reg);
var exec1 = reg.exec(s);
var exec2 = reg.exec(s);
console.log("match1:",match1); // [ "ha", "he", "ha" ]
console.log("match2:",match1); // [ "ha", "he", "ha" ]
console.log("exec1:",exec1); // [ "ha" ]
console.log("exec2:",exec2); // [ "he" ]

a、全局匹配时,match会返回所有匹配上的内容;而exec仅返回单次匹配的内容

b、全局匹配且进行多次匹配时,exe会从上次匹配结束的下一位开始匹配,返回本次匹配上的内容,直至没有可以匹配的内容,返回null,之后重新开始匹配

2、分组:
  无全局匹配分组时,match和exec返回结果相同。由于正则表达式采用了括号分组,所以在返回匹配结果的同时,依次返回该结果的所有分组:

var s = “ha he ha”;
var reg = /(ha) (he)/;//两个分组,无g
var match1 = s.match(reg);
var match2 = s.match(reg);
var exec1 = reg.exec(s);
var exec2 = reg.exec(s);
console.log(“match1:”,match1); // [ “ha he”, “ha”, “he” ]
console.log(“match2:”,match1); // [ “ha he”, “ha”, “he” ]
console.log(“exec1:”,exec1); // [ “ha he”, “ha”, “he” ]
console.log(“exec2:”,exec2); // [ “ha he”, “ha”, “he” ]

全局匹配分组时,match和exec返回结果不同。match会返回所有匹配到的结果;而exec会返回本次匹配到的结果,若表达式中出现分组,则会依次返回本次匹配的全部分组:

var s = "gg1 jj2 zz3";
var reg = /\b(\w+)(\d)\b/g;
var match1 = s.match(reg);
var match2 = s.match(reg);
var exec1 = reg.exec(s);
var exec2 = reg.exec(s);
var exec3 = reg.exec(s);
var exec4 = reg.exec(s);
console.log("match1:",match1);
console.log("match2:",match1);
console.log("exec1:",exec1);
console.log("exec2:",exec2);
console.log("exec3:",exec3);
console.log("exec4:",exec4);
match1: 
Array(3) [ "gg1", "jj2", "zz3" ]

match2: 
Array(3) [ "gg1", "jj2", "zz3" ]

exec1: 
Array(3) [ "gg1", "gg", "1" ]

exec2: 
Array(3) [ "jj2", "jj", "2" ]

exec3: 
Array(3) [ "zz3", "zz", "3" ]

exec4: null 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值