我试图从已标记为'@'的字符串中提取(可能用连字符)的单词。无声组无法在JavaScript正则表达式匹配()
因此,例如从字符串
var s = '@moo, @baa and @moo-baa are writing an email to [email protected]'
我想回
['@moo', '@baa', '@moo-baa']
为了确保我不会捕捉到的电子邮件地址,我检查组前面有一个空格字符或行首:
s.match(/(^|\s)@(\w+[-\w+]*)/g)
这似乎是做伎俩,但它也c aptures的空间,这是我不想:
["@moo", " @baa", " @moo-baa"]
沉默分组这样
s.match(/(?:^|\s)@(\w+[-\w+]*)/g)
似乎并没有工作,它会返回与之前相同的结果。我也尝试了相反的做法,并且检查了组前面没有\ w或\ S,但这也排除了该行的开头。我知道我可以简单地修剪空间,但我真的很希望只通过一次“匹配”呼叫就能完成这项工作。
有人有一个建议我做错了什么?提前感谢!
[编辑]
我也只注意到:为什么返回“@”符号,以及?我的意思是,这是我想要的,但为什么这样做呢?他们不在团队中,不是吗?
我不知道这个问题的解决方案,只是想指出的是'\ w'不会与非拉丁字符的工作,所以它可能是不可靠的使用它。这里的信息http://blog.stevenlevithan.com/archives/javascript-regex-and-unicode – 2012-07-17 19:06:05
@DmitryPashkevich:没关系,在这种情况下字符串仅限于拉丁字符。谢谢你的提醒! – HumanCatfood 2012-07-18 09:03:34