2015-01-21 131 views
3

在正则表达式中,如何查找以@symbol开头的匹配项?符号不能位于单词的中间(电子邮件地址中的链接)。正则表达式以@符号开头

例如,看起来像这样的字符串:

@someone's email is [email protected] and @someoneelse wants to send an email.

表达我用的是/^@[\w]/g

它应该返回:

@someone's

@someoneelse

我使用的表达式似乎不起作用。

+2

为什么要返回'@ someoneelse'?这是在字符串的中间(你说你不想要)。 – Thilo 2015-01-21 02:49:09

+0

我的意思是,在一个词的中间是我的意思。 @Thilo – arjay07 2015-01-21 02:49:43

+3

好吧,'^'匹配字符串的开头。如果你不想限制到字符串的开头,你为什么使用'^'? – Eevee 2015-01-21 02:51:39

回答

4

您可以利用\B这是一个非单词边界,是\b否定版本。

var s = "@someone's email is [email protected] and @someoneelse wants to send an email.", 
    r = s.match(/\[email protected]\S+/g); 

console.log(r); //=> [ '@someone\'s', '@someoneelse' ] 
0
/(^|\s)@\w+/g 

[\w]只匹配一个字字符,所以这就是为什么你的正则表达式只返回@s\w+将匹配1个或更多单词字符。

如果你想在该行里面的字符串的开头拿到的话,你可以用它执行字符串一个单词的两端开始一个空白字符之后的捕获组(^|\s)

DEMO

var str="@someone's email is [email protected] and @someoneelse wants to send an email."; 
console.log(str.match(/(^|\s)@\w+/g)); //["@someone", " @someoneelse"] 
相关问题