6

相关(但略有不同):

用锚标记包围@____、#___________ 和 http://_________ 的所有实例?

我想一次性用锚标记包围@_______#________和的所有实例。http://________

例如,考虑这条 Twitter 消息:

敏捷的棕狐@Spreadthemovie 跳过懒狗#cow http://URL

使用所需的正则表达式模式运行它会产生:

The quick brown fox <a href="a">@Spreadthemovie</a> jumps over the lazy
dog <a href="b">#cow</a> <a href="c">http://URL</a>

只包围以 开头的词@#否则http://dog@gmail.com不会变成dog<b>@gmail.com</b>

4

2 回答 2

2
var sample = "@sample";
sample = sample.replace(/[^\s+-+.+](@\w+|#\w+|http://[\w\./]+)[$\s+-+.+]/g, "<a>$1</a>");

$1插入匹配的字符串。

使用函数(我建议针对您的特定情况):

var sample = "@sample";
sample = sample.replace(/[^\s+-+.+](@\w+|#\w+|http://[\w\./]+)[$\s+-+.+]/g, function(str) {
    var href="";
    if(str.indeoxOf("#") !== -1)
        href=str;
    else if(str.indexOf("@") !== -1)
      ...
    return "<a href="+href+">"+str+"</a>";
});

当您想要获得更大或更精细的控制时,使用函数是一个好主意。如果您希望链接在其锚标记中具有不同的 href,这种方式会更容易。

在 MDC 上查看更多信息。

于 2009-07-25T04:41:11.247 回答
1
s/(?<!\w)(@\w*|#\w*|http:\/\/[\w\/\.?=]*\w)/<a>$1<\/a>/g

我认为这会做到。如果前面有数字或字母,它将不匹配@...、#... 或 http...,这将使电子邮件远离。请针对输入集进行测试,并报告任何失败,以便我可以充分利用它。

尤其是 URL,相当困难。现在我在保守方面犯了错误。如果您愿意,可以将其更改为仅在点、空格和括号处停止。

现在,对于@、# 和 http... 的不同链接,您必须使用一个函数进行替换,如另一个答案所示。

通过三遍,只需执行以下操作:

s/(?<!\w)(http:\/\/[\w\/\.?=]*\w)/<a href="c">$1<\/a>/g
s/(?<!\w)(#\w*)/<a href="b">$1<\/a>/g
s/(?<!\w)(@\w*)/<a href="a">$1<\/a>/g
于 2009-07-25T04:34:19.093 回答