javascript - 为什么正则表达式在 Javascript 中使用 'match' 两次获取值?

标签 javascript regex

我有以下代码:

var str = "$123";
var re = /(\$[0-9]+(\.[0-9]{2})?)/;
var found = str.match(re);

alert(found[1]);
alert(found[0]);

我试图理解为什么 found[0] 和 found[1] 会包含 123 美元。为什么会得到两次?

我只想得到所有“潜在”价格,例如,如果我有这个字符串:

var str = "$123 $149 $150"; 它将是:

found[0] = $123
found[1] = $149
found[2] = $150

就是这样,找到的数组不会有更多的匹配项。

这里发生了什么?我错过了什么?

最佳答案

那是因为整个表达式都有括号:它定义了一个捕获组。

当你不使用 g 标志时,match 返回一个数组:

  • 如果匹配模式则为整个字符串
  • 捕获的组

这里捕获的组是整个字符串。

你似乎想要的是

"$123 $149 $150".match(/\$\d+(\.\d{0,2})?/g)

返回

["$123", "$149", "$150"]

引用:the MDN about regular expressions and flags

关于javascript - 为什么正则表达式在 Javascript 中使用 'match' 两次获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19664929/

相关文章:

正则表达式我如何验证字母之间的下划线

java - 寻找 Java 正则表达式以匹配给定范围内的最后 2 位数字

c++ - 正则表达式 : group for every found item (PCRE)

javascript - 在远程服务器上时不显示 Strongloop Loopback 资源管理器

javascript - 如何在 asp.net c# 中将 span 标签添加到按钮

javascript - 在新标签页/窗口/弹出窗口中打开外部网站

javascript - 为什么不在选项卡中拉伸(stretch)我的 canvasjs 图表

regex - 用于基于正则表达式的计数的 splunk 查询

javascript - 正则表达式问题,与两列条目不匹配

javascript - 如何在 JS 中定位 CSS(而不是注入(inject) HTML)?