Javascript 字符串#match()捕获组的奇怪行为

Javascript 字符串#match()捕获组的奇怪行为,javascript,regex,capturing-group,Javascript,Regex,Capturing Group,问题:我有一个字符串,例如:“to see to be read”,我想捕获3个没有“to”前缀的动词,在这种情况下:be,see和read 在Regex 101上,我尝试过,它解决了问题: Regex:/to(\w+)/g 结果:['be','see','read'] 出于好奇,我用积极的前瞻性做了一个实验,结果是一样的 Regex:/(?=to\w+)\w+(\w+)/g 结果:['be','see','read'] 好的。奇怪的是:当我在浏览器控制台(Chrome或Firefox)上运行这

问题:我有一个字符串,例如:
“to see to be read”
,我想捕获3个没有“to”前缀的动词,在这种情况下:
be
see
read

在Regex 101上,我尝试过,它解决了问题:

Regex
/to(\w+)/g

结果:
['be','see','read']

出于好奇,我用积极的前瞻性做了一个实验,结果是一样的

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"]    
我是错过了什么还是踩到了虫子

免责声明:这不是家庭作业,我只是针对一个更大的问题验证这一点。我不是regex的专家,但对它知道一两件事


编辑:我想我被Regex101愚弄了。它给我的代码示例显示了
String#match()
方法,但该函数没有相应地排除结果组上的regexp组。在
RegExp#exec()
匹配项上循环是最好的选择

在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"] 

六羟甲基三聚氰胺六甲醚。。。我懂了。因此,我认为剩下的问题是:
String#match()
为什么不按预期工作?它按预期工作,只是返回满足匹配的子字符串。正如anubhava所说,
.exec()
方法是检索捕获组的方法。@EvertonAgner:
String#match
不会返回所有捕获组,如PHP的
preg(preg)match(all)。看看这个问答:哦,我明白了,我就靠这个了。谢谢