防止正则表达式组包含前一个字符?

时间:2011-11-14 07:14:04

标签: javascript regex

我试图以@开头的任何单词,例如在“@word”中,但只获取“单词”值。

我的示例文字是:

@bob asodija qwwiq qwe @john @cat asdasd@qeqwe 

我现在的正则表达式是:

/\B@(\w+)/gi

这完美无缺,但“@”仍在被捕获。这场比赛的输出是:

"@bob"
"@john"
"@cat"

我尝试在后面引用中设置@,但它仍然包含结果中的@。

/\B(?:@)(\w+)/gi

3 个答案:

答案 0 :(得分:5)

您想使用从exec

返回的匹配数组
var teststr = '@bob asodija qwwiq qwe @john @cat asdasd@qeqwe';
var exp = /\B@(\w+)/gi;

var match = exp.exec(teststr);
while(match != null){
    alert(match[1]); // match 1 = 1st group captured
    match = exp.exec(teststr);
}

答案 1 :(得分:2)

这是一个使用String.replace方法的巧妙技巧,它可以将一个函数作为替换。

var matches = [];
var str = "@bob asodija qwwiq qwe @john @cat asdasd@qeqwe";

str.replace( /\B@(\w+)/g, function( all, firstCaptureGroup ) {
    matches.push( firstCaptureGroup );
});
console.log( matches ); //["bob", "john", "cat"]

答案 2 :(得分:-2)

除了正则表达式之外,这是一个没有额外计算的更好的解决方案:

(?<=\B@)(\w+)