问题:我有一个字符串,例如:"to see to be to read"
我想要捕获没有“to”前缀的3个动词,在此案例:be
,see
和read
。
在Regex 101上,我尝试了this really simple regex并解决了问题:
正则表达式:/to (\w+)/g
结果: ['be', 'see', 'read']
只是出于好奇,我使用正向前瞻制作了this another regex,结果是一样的。
正则表达式:/(?=to \w+)\w+ (\w+)/g
结果: ['be', 'see', 'read']
好。奇怪的是:当我在浏览器控制台(Chrome或Firefox)上运行此正则表达式时,结果会有所不同。以下两次尝试给出了相同的结果:所有三组包括 to
前缀。
> 'to be to see to read'.match(/to (\w+)/g)
["to be", "to see", "to read"]
> 'to be to see to read'.match(/(?=to \w+)\w+ (\w+)/g)
["to be", "to see", "to read"]
我在这里遗漏了什么,还是我踩到了虫子?
免责声明:这不是家庭作业,我只是为了解决更大的问题。我不是一名正则表达专家,但对此有所了解。
编辑:我想我被Regex101愚弄了。它给我的代码示例显示了String#match()
方法,但此函数不会在结果组上相应地排除正则表达式组。循环过RegExp#exec()
次比赛是可行的方法!
答案 0 :(得分:1)
在Javascript中捕获组的正确方法是在while循环中使用RegExp#exec
方法:
var re = /to (\w+)/g,
matches = [],
input = "to see to be to read";
while (match = re.exec(input))
matches.push(match[1]);
console.log(matches);
//=> ["see", "be", "read"]