Почему суб-совпадения Javascript перестают работать, если установлен модификатор g
?
var text = 'test test test test';
var result = text.match(/t(e)(s)t/);
// Result: ["test", "e", "s"]
Вышеприведенное работает нормально, result[1]
равен "e"
а result[2]
- "s"
.
var result = text.match(/t(e)(s)t/g);
// Result: ["test", "test", "test", "test"]
Вышесказанное игнорирует мои группы захвата. Является ли следующее единственно верным решением?
var result = text.match(/test/g);
for (var i in result) {
console.log(result[i].match(/t(e)(s)t/));
}
/* Result:
["test", "e", "s"]
["test", "e", "s"]
["test", "e", "s"]
["test", "e", "s"]
*/
РЕДАКТИРОВАТЬ:
Я снова вернулся, чтобы с радостью сказать вам, что через 10 лет вы можете сделать это (.matchAll был добавлен в спецификацию)
let result = [...text.matchAll(/t(e)(s)t/g)];