为什么我的捕获括号外的字符包含在我的RegExp的匹配中?

时间:2016-04-25 07:55:07

标签: javascript regex

在JavaScript中工作我的字符串可能包含前缀为“@”的单词。字符串可能看起来像@one two @three。我想要一个RegExp找到以“@”为前缀的单词,但我不想包含“@”本身。

我创建了一个类似于/@(\w+)/g的RegExp,但是当我将它与我的字符串匹配时,确实包含了“@”。为什么是这样?我假设如果我想要包含它,那么“@”将在捕获括号内,如/(@\w+)/g

var s = '@one two @three'
var matches = s.match(/@(\w+)/g)
// matches is now [ '@one', '@three' ] but I want [ 'one', 'three' ]

注意我目前得到的结果,获取我想要的数组当然没有问题,我可以删除每个字符串的第一个字符。但我想知道的是:

是否可以更改我的RegExp以获得所需的结果? 和: 为什么我的捕获括号外的字符包含在结果中?我觉得很直观,只应包括括号内的字符。

1 个答案:

答案 0 :(得分:1)

您需要访问第一个捕获组

-1

<强> Ideone Demo

JS Demo

var re = /@(\w+)/gm; 
var str = '@one two @three';
var m;

while ((m = re.exec(str)) !== null) {
    print(m[1]);
}