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

时间:2012-09-21 14:39:25

标签: javascript regex

为什么

"$1 $2 $3".match(/\$(\d+)/g)

返回

 ["$1", "$2", "$2"]

,而不是

 ["1", "2", "3"]

如果我删除全局标记,它将为我提供匹配和捕获的匹配:

["$1", "1"]

但只有一个。

有没有办法做一个reg ex capture而不给我这个?

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

"$1 $2 $3".match(/(?:\$)(\d+)/g)

1 个答案:

答案 0 :(得分: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"]