javascript 中 exec 与 match 方法的区别和使用

比较

  1. match 方法在没有 global 标识的情况下和 exec 方法是等同的
  2. match 方法在有 global 标识的情况下即是使用 exec 方法做循环即:
var re = /[^\/]+/g;
var match;

while (match = re.exec('/a/b/c/d')) {
    // match is now the next match, in array form.
   console.log(match)
}

示例

示例一

var str = 'The Quick Brown Fox Jumps Over The Lazy Dog';
var re = /quick\s(brown).+?(jumps)/i;
re.exec(str);
// ["Quick Brown Fox Jumps", "Brown", "Jumps"]

var re = /quick\s(brown).+?(jumps)/ig; // 加了 g
str.match(re);
// 因为匹配玩 re.lastIndex 变成了 25,从下一次循环开始的话 exec 得到的就是 null
// 所以只返回一个元素
// ["Quick Brown Fox Jumps"] 

示例二

var str = '2016-03-14';
var re = /\d+/g;
str.match(re);
// ["2016", "03", "14"]

re.exec(str);
// ["2016"]

exec global 标识说明

对于 RegExp.proptype.exec 来说 global 标志是没有用的,也可以看到规范中没有使用 global 的情况。即:

const str = '2020-03-14';
// 无论有没有 g 都是一样的
/\d+/.exec(str); // ['2020']
/\d+/g.exec(str); // ['2020']

参考

  1. @@match 规范
  2. exec 规范
  3. MDN exec
  4. MDN @@match
  5. stackoverflow
posted @ 2020-04-30 11:13  雷夫·麦  阅读(217)  评论(0编辑  收藏  举报