通过解析包含URL的文本生成HTML锚点

时间:2015-09-22 11:54:34

标签: javascript html regex

我有一个段落,其中包含可能还包含网址的正在运行的文字。该段落将包含描述对象或事物的运行文本,并在其间插入URL。 URL可以是

的形式
  1. http://mail.google.com
  2. http://www.google.com
  3. www.google.com
  4. 我需要使用JavaScript解析段落并生成HTML内容,确保将URL呈现为HTML锚点。 我可以使用以下 -

    var httpUrlPattern = /https?:\/\/[\w-]+(\.[\w-]+)+([\w.,@?^=%&:\/\$~+#-]*[\w@?^=%&\/~+#-])?
    text = text.replace( httpUrlPattern, '<a href="$&" target="_blank">$&</a>' );
    

    这适用于#1)和#2类型的URL。但对于#3),它会生成href = / www.google.com

    所以我应用了额外的过滤

    var wwwUrlPattern = /(www\.)[\w-]+(\.[\w-]+)+([\w.,@?^=%&amp;:\/\$~+#-]*[\w@?^=%&amp;\/~+#-])?;
    text = text.replace( wwwUrlPattern, '<a href="http://$&" target="_blank">$&</a>' );
    

    这解决了#3)但是打破了#2)。

    有任何建议我如何解决所有情况?

2 个答案:

答案 0 :(得分:0)

嵌套群组

var wwwUrlPattern = /(http:\/\/)?((www\.)[\w-]+(\.[\w-]+)+([\w.,@?^=%&amp;:\/\$~+#-]*[\w@?^=%&amp;\/~+#-]))?/;
text = text.replace( wwwUrlPattern, '<a href="http://$2" target="_blank">$&</a>' );

答案 1 :(得分:0)

缺乏URL构造标准会使其变得困难。我假设您要抓住没有wwwmail前缀的网址,例如stackoverflow.com。这使得匹配非常不确定。它可能是这样的:

/\b[\w.,@?^=%&:/$~+#-]+\.\w\w+\b/

但是存在错误匹配的巨大风险。

为了使其更具体,您可以制作http www / mail部分(或/和任何其他给定的前缀集)强制性:

/\b((?:https?:\/\/|www\.|mail\.)[\w.,@?^=%&:/$~+#-]+)\.\w\w+\b/

希望这有帮助。

问候。