查找@<;用户名>;在Javascript的段落中

查找@<;用户名>;在Javascript的段落中,javascript,regex,Javascript,Regex,我有一个段落,其中可能有一个或多个“@”实例,后跟不同的用户名。我如何在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.in

我有一个段落,其中可能有一个或多个“@”实例,后跟不同的用户名。我如何在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.
)您需要从正则表达式中删除引号,并使用
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' ]
或者,您可以使用字符串。方法


“将代码放在这里”类型的问题对于堆栈溢出来说太广泛了。你需要在解决这个问题上做出实质性的尝试。我将给你一个提示,正则表达式是需要阅读的东西:javascript指南在这里有大量关于它的教程:@tomuky不幸的是,它仍然是离题的。说它不起作用是不够的。你需要描述它不起作用的原因。@Anonymous如果我知道它不起作用的原因,我就不会在这里。@tomuky不,你误解了我。我的意思是,你应该说“这个错误地替换了这个示例文本,因为结果是这个,我想要这个”或“这个代码有语法错误:[这里的语法错误]”。然后,以“我试图解决的问题是……”作为结束语。如果你对别人给出答案感到非常不安,你应该吃一片避寒药。这些乱发的愤怒是怎么回事?去掸掉你的“殴打将继续,直到士气提高”海报上的灰尘。@tadman,恕我直言,Matt只是想要一个整体上更健康的社区,而向人们灌输代码并不是其中的原因。他在上面的评论(暗示regex)是完美的,因为他指出了正确的方向,但是,他让海报做了研究和编码。@MarkGabriel担心这类事情是好的,但看到一个完全有效的答案会因为某人的“价值”观点而受到严厉惩罚是不必要的。@hwnd问题和答案的编辑确实改进了这一点,使之成为每个人的资源。很高兴看到堆栈溢出工作。。。投票表决结果
var post   = 'Hi @tom, where is @john and @nick?',
    result = post.match(/@\w+/g);

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