re.exec和str.match的区别

本文深入探讨了正则表达式中match与exec方法的使用区别,特别是在全局匹配时的行为差异。通过实例展示了这两种方法在不同修饰符作用下的返回结果格式,以及它们如何处理多次匹配。

re.exec()和str.match()的区别

match返回结果的格式问题
注:match返回结果的格式,与正则对象是否有修饰符g有关。
看一个match案例:

  var str='2017.06.27';
  var re1=/\b(\d+)\b/;
  var re2=/\b(\d+)\b/g;
  console.log(str.match(re1));   ["2017", "2017", index: 0, input: "2017.06.27"]
  console.log(str.match(re2));   ["2017", "06", "27"]

没有g的时候,返回的是标准匹配格式,此数组的第 0 个元素是与正则表达式相匹配的文本,第 1 个元素是第 1 个子表达式(即()括起来的内容)相匹配的文本(如果有的话),第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话),以此类推。除了数组元素和 length 属性之外,exec() 方法还返回两个属性。index 属性是匹配文本的第一个字符的位置。input 属性是被检索的字符串 string。
有g的时候返回的是所有匹配的内容,但是没有了index和input属性。
当没有匹配时,不管有无g,都返回null。

再看一个exec的案例:

 var str='2017.06.27';
var re1=/\b(\d+)\b/;
var re2=/\b(\d+)\b/g;

console.log(re1.exec(str)); ["2017", "2017", index: 0, input: "2017.06.27"]
console.log(re2.exec(str)); ["2017", "2017", index: 0, input: "2017.06.27"]
console.log(re2.exec(str)); ["06", "06", index: 5, input: "2017.06.27"]
console.log(re2.exec(str)); ["27", "27", index: 8, input: "2017.06.27"]

可以看到当exec使用全局匹配时,每一次的匹配都会接着上一次匹配的结果继续匹配。

因此re.exec和str.match在不用全局匹配时,返回的结果是一样的,只有在用全局匹配时才有不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值