【问题标题】:JavaScript RegExp method exec() returns only one item [duplicate]JavaScript RegExp方法exec()仅返回一项[重复]
【发布时间】:2012-02-09 18:32:55
【问题描述】:

可能重复:
Regex exec only returning first match

"a1b2c3d".replace(/[0-9]/g,"x")

按预期返回“axbxdxd”。

/[0-9]/g.exec("a1b2c3d")

但是只返回一个包含一项的数组:["1"]。它不应该返回所有匹配项吗?

提前致谢!

【问题讨论】:

标签: javascript regex


【解决方案1】:

没有。您需要多次拨打exec

var re = /[0-9]/g;
var input = "a1b2c3d";
var myArray;
while ((myArray = re.exec(input)) != null)
{
  var msg = "Found " + myArray[0] + ".  ";
  print(msg);
}

编辑Mozilla Developer Network page on exec 对此功能有更多要说的。这就是我获得示例并针对您的问题对其进行修改的地方。

编辑 2:我已经更改了上面的代码,所以它实际上并不是一个无限循环。 :-)

【讨论】:

  • 不幸的是,您发布的示例不起作用 - 它是一个仅返回“1”的无限循环。有什么想法吗?
  • @muffel:尝试将正则表达式移动到它自己的变量中? var re = /[0-9]/g;...然后在 while 循环中使用它:while ((myArray = re.exec("a1b2c3d")) != null) ?
  • 嗯,这很好。在 Chrome 中运行发布的代码会生成打印页面窗口的无限循环。不得不杀了它然后回来。 :-) 顺便说一句,是的,先把它放在一个变量中。否则,您每次迭代都会重新创建一个新的正则表达式。
  • 我需要将正则表达式和字符串 (?) 一起移动到它们自己的变量中。最后它起作用了。谢谢!
  • @Wiseguy:固定和固定。 :-)
猜你喜欢
  • 2011-07-14
  • 2018-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-02
相关资源
最近更新 更多