一尘不染

RegExp的exec()函数和String的match()函数有什么区别?

javascript

如果我运行此命令:

/([^\/]+)+/g.exec('/a/b/c/d');

我得到这个:

["a", "a"]

但是如果我运行这个:

'/a/b/c/d'.match(/([^\/]+)+/g);

然后,我得到了预期的结果:

["a", "b", "c", "d"]

有什么不同?


阅读 256

收藏
2020-05-01

共1个答案

一尘不染

exec带有全局正则表达式的表达式应在循环中使用,因为它仍将检索所有匹配的子表达式。所以:

var re = /[^\/]+/g;
var match;

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

// No more matches.

String.match 为您执行此操作,并丢弃捕获的组。

2020-05-01