我无法在the spec或list 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?
答案 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]
input
和index
属性如何 - 它们只是通过res
方法添加到exec
数组中。例如,您可以查看v8源代码:
res
对象)