为什么
"$1 $2 $3".match(/\$(\d+)/g)
返回
["$1", "$2", "$2"]
, 不是
["1", "2", "3"]
?
如果我删除全局标志,它将给我匹配和捕获的匹配:
["$1", "1"]
但只有一个。
有没有办法进行 reg ex 捕获而不给我这个?
即使在 $ 周围加上非捕获括号也会给我相同的结果,例如:
"$1 $2 $3".match(/(?:\$)(\d+)/g)
为什么
"$1 $2 $3".match(/\$(\d+)/g)
返回
["$1", "$2", "$2"]
, 不是
["1", "2", "3"]
?
如果我删除全局标志,它将给我匹配和捕获的匹配:
["$1", "1"]
但只有一个。
有没有办法进行 reg ex 捕获而不给我这个?
即使在 $ 周围加上非捕获括号也会给我相同的结果,例如:
"$1 $2 $3".match(/(?:\$)(\d+)/g)
如果您在正则表达式中使用捕获组(例如,parens),那么您无法g
按照您尝试的方式获得与标志的多个匹配项,因为该.match()
函数无法返回二维数据(捕获组列表每次匹配)。它本来可以设计为这样做的,但是为了获取该信息并非如此,您必须循环并.exec()
多次调用,每次调用它时,您都会从每个连续匹配中获取所有数据。
使用如下所示获取此数据.exec()
:
var str = "$1 $2 $3", matches;
var allMatches = [];
var reg = /\$(\d+)/g;
while (matches = reg.exec(str)) {
// matches[1] is each successive match here from your captured group
allMatches.push(matches[1]);
}
// allMatches will be what you wanted ["1", "2", "3"]