为什么Javascript子匹配在设置g
修饰符时停止工作?JavaScript正则表达式和子匹配
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"]
*/
使用exec似乎不听g修饰符,但它支持子匹配/组。所以结果将是第一个匹配(它基本上忽略了g修饰符) – 2009-05-09 21:03:37
添加了一个关于这个的澄清 - 你必须重复调用exec()来获得多个匹配。 – hbw 2009-05-09 21:05:52
不是最优雅的解决方案。 我有些期望的输出是这样的: [ \t [ “测试”, “E”, “S”], \t [ “测试”, “E”, “S”], \t [” test“,”e“,”s“], \t [”test“,”e“,”s“] – 2009-05-09 21:13:01