2

我无法在规范提案列表中找到关于ES6 中的 RegExps 是否会提供必要的方法来支持匹配组的迭代器协议的答案。有许多符号方法,但我对各种符号的语义还不够熟悉,无法判断它们是否会提供这种方法。

我会想象这样的事情:

var rex = /((\w+)\s?)*/;
var res = rex.exec("test string");

console.log(res);

for (let match of res) {
    console.log(match);
}

这似乎在 6to5 的 REPL 中有效,记录了预期的"test string", "string", "string".

这是在 ES6 规范中具体定义的,如果没有,正则表达式结果的哪些属性允许它工作?或者它只是 6to5 不完全是 ES6 的产物?

4

1 回答 1

3

res只是一场Array比赛。您可以使用以下变体之一对其进行检查:

Object.prototype.toString.call(res) === '[object Array]'
res instanceof Array;
Array.isArray(res);
res.constructor === Array;

ES6 中的数组支持迭代器接口。请参见此处,或在 MDN 中:Array.prototype[@@iterator]

input和属性怎么样index- 他们只是通过方法添加到res数组中exec。例如,您可以查看 v8 源代码:

于 2015-01-14T17:36:44.973 回答