仅从Javascript中捕获正则表达式的括号中获取内容

Wil*_*ker 3 javascript regex

为什么

"$1 $2 $3".match(/\$(\d+)/g)
Run Code Online (Sandbox Code Playgroud)

返回

 ["$1", "$2", "$2"]
Run Code Online (Sandbox Code Playgroud)

不是

 ["1", "2", "3"]
Run Code Online (Sandbox Code Playgroud)

如果我删除全局标志,它将给我匹配和捕获的匹配:

["$1", "1"]
Run Code Online (Sandbox Code Playgroud)

但只有一个.

有没有办法做一个reg ex捕获不给我这个?

即使在$周围放置一个非捕获括号也会给出相同的结果,例如:

"$1 $2 $3".match(/(?:\$)(\d+)/g)
Run Code Online (Sandbox Code Playgroud)

jfr*_*d00 6

如果你在你的正则表达式中使用一个捕获组(例如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"]
Run Code Online (Sandbox Code Playgroud)