我有以下代码:
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"]
关于javascript - 为什么正则表达式在 Javascript 中使用 'match' 两次获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19664929/