在Javascript </username>中的段落中查找@ <username>的每个实例

时间:2014-06-11 02:37:13

标签: javascript regex

我有一个段落可能有一个或多个&#34; @&#34;后跟不同的用户名。如何在Javascript中找到每个这样的实例?

这样的东西,但它还没有工作:

var regexp = '/@([a-z0-9_]+)/i';
var post = "Hi @tom, where is @john and @nick?" ;
var match, matches = [];

while ((match = regexp.exec(post)) != null) {
    matches.push(match.index);
}

console.log(matches);

控制台日志会显示为: @tom @john @nick

1 个答案:

答案 0 :(得分:2)

您的代码中有两个错误,导致它无法按预期工作。

1.)您需要从正则表达式中删除引号并使用g(全局)修饰符。您可以将字符类替换为较短的版本\w,并在此处删除不区分大小写的修饰符。

var regexp = /@\w+/g

2.)您需要引用匹配而不是引用匹配。index

matches.push(match[0]);

最终解决方案:

var post   = "Hi @tom, where is @john and @nick?";
var regexp = /@\w+/g
var match, matches = [];

while ((match = regexp.exec(post)) != null) {
   matches.push(match[0]);
}

console.log(matches); //=> [ '@tom', '@john', '@nick' ]

或者,您可以使用字符串match方法。

var post   = 'Hi @tom, where is @john and @nick?',
    result = post.match(/@\w+/g);

console.log(result); //=> [ '@tom', '@john', '@nick' ]