所以我有这个正则表达式
/(?:[\s.]|^)@(\w+\.?(?:\w+))/g
这错误地给了我提及之前的时间-例如
.@blah.
匹配并捕获了先前的句号。
此外,当我这样做时-
句子结尾。@ foo。句子开头
它捕获
[email protected]
当我只想捕获@foo时
当我有这个正则表达式时-
/(?:\s|^)@(\w+\.?(?:\w+))/g
所有情况都有效
.@foo. and End of [email protected] of sentence
在那些情况下,没有匹配的东西。
我该如何更改此正则表达式?
代码(尽管我不太确定为什么会有帮助)
text.replace(/(?:\s|^)@(\w+\.?(?:\w+))/g, function(match, p1) {
var text = match,
link = '/' + $.trim(text).slice(1);
return '<a href="' + link + '" target="_blank">' + text + "</a>";
});
编辑-清晰度
好的,所以我想上面的内容不清楚。
如果我有这句话
bladi [email protected] blah
我想捕捉
@praks5432
如果我有这句话
bladi bladh.@praks5432
我想捕捉
@praks5432
如果我有
@praks5432..
我想捕捉
@praks5432
如果我有
.@praks5432.
我想捕捉
@praks5432
最佳答案
如果您只想以匹配的字符串获取捕获的组,请不要使用g标志:
".@blah.".match(/(?:[\s.]|^)@(\w+)/)
给
[".@blah", "blah"]
所以您只需要使用索引1处的元素。