正则表达式:用于“提及”

4

我正在努力想出一个正则表达式,只能在单词开头找到“@”符号。例如:

这里:The @dog went to the park.

但不是这里:The d@og went to the park.

或者这里:The@dog went to the park.

基本上,我只想捕获普通的“提及”行为,而忽略奇怪的边缘情况。我觉得这种情况很常见,一定有一些已经被广泛接受的正则表达式可以解决。

编辑:

我尝试了这个:

/(@\w+)/gi

但是它捕捉到了我不想获得的情况。


Please post your attempt. - Wiktor Stribiżew
那是一个“at”符号,而“&”是“ampersand”。 - Barmar
这是什么语言? - z7r1k3
1
是的,它也被称为“at符号”,而且它是JavaScript。 - nmac
你是指和号(&)、艾特符号(@)、安培沙(Ample Sand)、琥珀沙(Amber Sand)还是百分号(%)? - Marged
1
@nmac,我从来不知道它被称为“at”符号。感谢您的教育! - Gary_W
2个回答

15

您可以使用以下正则表达式:

/\B@\w+/g

\B 匹配非单词边界,因此,在 @ 前需要一个非单词字符(或字符串的开头)。

请参见正则表达式演示

var re = /\B@\w+/g; 
var str = 'The @dog went to the park.\nBut not here: The d@og went to the park.\nOr here: The@dog went to the park.';
var res = str.match(re);
document.body.innerHTML = "<pre>" + JSON.stringify(res, 0, 4) + "</pre>";


这会允许特殊的用户名字符吗?例如:-._ - zomars
2
@zomars 不,你可能遇到了不同类型的提及。尝试使用\B@\S+\b\B@\S+或仅使用@\S+ - Wiktor Stribiżew

1
正则表达式应该类似于这样:

^@[A-Za-z]+|.+ @[A-Za-z]+

这将寻找以第一个单词开头的@,或者在一个单词之后开头的@

它并不总是在开头。看看第一个例子,它在“ The ”之后。 - Barmar
你说“这里,但不是这里,或者这里”,这意味着第一个例子是唯一正确的。否则,请编辑您的问题。 - z7r1k3
我不是楼主。你的答案在第一个例子中不起作用。 - Barmar
哦,抱歉。我意识到我不知怎么地误读了第一个例子。现在正在修复它。 - z7r1k3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接