JavaScript正则表达式和子匹配项

g设置修饰符后,为什么Java子匹配项停止工作?


var text = 'test test test test';


var result = text.match(/t(e)(s)t/);

// Result: ["test", "e", "s"]

以上工作正常,result[1]is "e"和result[2]is "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"]

*/

编辑:


我再次高兴地告诉您,十年后,您现在可以执行此操作(.matchAll已添加到规范中)


let result = [...text.matchAll(/t(e)(s)t/g)];


UYOU
浏览 706回答 3
3回答

蓝山帝景

明确addresssing另一个角落的情况:如果正则表达式有一个捕获组,但全球改性剂没有被使用,匹配()将返回第一个完整的匹配,然后匹配捕捉所有子。例如,'foobar'.match(/f(o)*(ba)/)将返回["fooba", "o", "ba"]。
打开App,查看更多内容
随时随地看视频慕课网APP