Javascript Regexp没有返回全局结果

Ste*_*den 14 javascript regex global

我的理解是,下面这三行中的所有这三行都应该返回一个包含2个结果的ARRAY.然而,无论正则表达式在字符串中重复多少次,RegExp都只返回1个结果.

有人可以解释为什么吗?也许建议我如何让RegExp给我全局结果?

//INTPUT: 
    console.log(new RegExp("New York", "gi").exec("New York New York")); 

//OUTPUT: 
["New York"]

//INTPUT: 
    console.log(new RegExp(/New York/gi).exec("New York New York"));

//OUTPUT: 
["New York"]

//INTPUT: 
    console.log("New York New York".match(/New York/gi));

//OUTPUT:
["New York", "New York"]
Run Code Online (Sandbox Code Playgroud)

Rob*_*sor 21

你的第三个例子是获得比赛数组的最佳方式.

RegExp.exec实际上会记住它的位置,并在后续调用中返回下一个结果:

>>> var v = /new york/gi
>>> v.exec("NEW YORK new york")
["NEW YORK"]
>>> v.exec("NEW YORK new york")
["new york"]
>>> v.exec("NEW YORK new york")
null
Run Code Online (Sandbox Code Playgroud)

  • 你可以利用它来自己建立一个aray,但是调用string.match会更容易 (2认同)

Der*_*ley 13

这是预期的,exec()返回单个匹配但提供有关匹配的更多信息而不是match().如果您只想要所有匹配项,请使用match().来自JavaScript:权威指南:

回想一下,match()在传递全局常规表达式时返回一个匹配数组.相反,exec()始终返回单个匹配并提供有关该匹配的完整信息.当在具有g标志的常规节目上调用exec()时,它会设置匹配的子字符串的lastIndex属性.当第二次为同一个正则表达式调用exec()时,它会在lastIndex属性指示的字符位置开始搜索.