我正在尝试从标有“@”的字符串中提取(可能连字符)单词。
所以例如从字符串
var s = '@moo, @baa and @moo-baa are writing an email to a@bc.de'
我想回来
['@moo', '@baa', '@moo-baa']
为了确保我没有捕获电子邮件地址,我检查了该组前面是否有一个空格字符或行的开头:
s.match(/(^|\s)@(\w+[-\w+]*)/g)
这似乎可以解决问题,但它也捕获了我不想要的空间:
["@moo", " @baa", " @moo-baa"]
像这样使分组静音
s.match(/(?:^|\s)@(\w+[-\w+]*)/g)
似乎不起作用,它返回与以前相同的结果。我也尝试了相反的方法,并检查了该组前面是否没有 \w 或 \S ,但这也排除了该行的开头。我知道我可以简单地修剪空格,但我真的很想通过一个“匹配”调用来完成这个工作。
有人建议我做错了什么吗?非常感谢提前!!
[编辑]
我也刚刚注意到:为什么它也会返回“@”符号?!我的意思是,这就是我想要的,但它为什么要这样做呢?他们不在团体之外,不是吗?