在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以获得所需的结果? 和: 为什么我的捕获括号外的字符包含在结果中?我觉得很直观,只应包括括号内的字符。
答案 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]);
}