ES6 RegExps会支持Iterator协议吗?

时间:2015-01-14 17:26:09

标签: javascript regex ecmascript-6 iterator-protocol

我无法在the speclist of proposals中找到答案,了解ES6中的RegExps是否会提供必要的方法来支持匹配组的Iterator protocol。有许多符号方法,但我不熟悉各种符号的语义,以告诉他们是否会提供这种方法。

我会想象:

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?

1 个答案:

答案 0 :(得分:3)

res只是Array个匹配项。您可以使用以下变体之一进行检查:

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

ES6中的数组支持迭代器接口。请参阅here或MDN:Array.prototype[@@iterator]

inputindex属性如何 - 它们只是通过res方法添加到exec数组中。例如,您可以查看v8源代码: