所以我有这个正则表达式

/(?:[\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处的元素。

09-25 16:45