Будет ли ES6 RegExps поддерживать протокол Iterator?

Я не могу найти ответ в спецификации или списке предложений относительно того, будет ли RegExps в ES6 предоставлять необходимые методы для поддержки протокола Iterator для соответствующих групп. Существует несколько методов обработки символов, но я недостаточно знаком с семантикой различных символов, чтобы сказать, будут ли они обеспечивать это.

Я хотел бы представить что-то вроде:

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

console.log(res);

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

Это похоже на работу в REPL 6to5, запись ожидаемого "test string", "string", "string",

Это конкретно определено в спецификации ES6, и если нет, то какие свойства результата регулярного выражения позволяют ему работать? Или это просто артефакт 6to5, который не совсем ES6?

1 ответ

Решение

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:

Другие вопросы по тегам