我试图以@开头的任何单词,例如在“@word”中,但只获取“单词”值。
我的示例文字是:
@bob asodija qwwiq qwe @john @cat asdasd@qeqwe
我现在的正则表达式是:
/\B@(\w+)/gi
这完美无缺,但“@”仍在被捕获。这场比赛的输出是:
"@bob"
"@john"
"@cat"
我尝试在后面引用中设置@,但它仍然包含结果中的@。
/\B(?:@)(\w+)/gi
答案 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+)