javascript 中 exec 与 match 方法的区别和使用
比较
match
方法在没有global
标识的情况下和exec
方法是等同的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']