微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 如何用链接替换纯网址?

我正在使用以下功能来匹配给定文本中的URL,并将其替换为 HTML链接.正则表达式很好,但是现在我只是替换了第一场比赛.

如何替换所有的URL?我想我应该使用exec命令,但是我没有真正想像如何做.

function replaceURLWithHTMLLinks(text) {
    var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/i;
    return text.replace(exp,"<a href='$1'>$1</a>"); 
}

解决方法

首先,滚动自己的正则表达式来解析URL是一个可怕的想法.你必须想象这是一个常见的问题,有人写了,调试和 tested一个库,根据 the RFCs. URI是复杂的 – 查看 code for URL parsing in Node.js和维基百科页面 URI schemes.

解析URL有很多边缘案例:international domain names,实际(.museum)与不存在(.etc)TLD,奇怪的标点符号包括parentheses,URL尾部的标点符号,IPV6主机名等.

我看过libraries a ton,尽管有些缺点,还有一些值得使用:

> SoapBoxlinkify已经看到了一些认真的努力,a major refactor in June 2015 removed the jQuery dependency.它还有issues with IDNs.
> AnchorMeclaims to be faster和更瘦的新手.一些IDN issues以及.
> Autolinker.js非常具体地列出了功能(例如“将正确处理HTML输入,该实用程序将不会更改anchor()标记内的href属性”).在demo becomes available时,我会给它一些测试.

我已经取消了这个任务的资格的图书馆:

> Django的urlize didn’t handle certain TLDs properly(这是官方list of valid TLDs. No demo.
> autolink-js不会检测到没有http://的“www.google.com”,所以它不太适合用纯文本自动链接随机URL”(没有方案/协议).
> Ben Alman’s linkify自2009年以来一直保持不变.

如果你坚持正则表达式,那么最全面的就是URL regexp from Component,虽然它会通过查看来错误地检测出一些不存在的两个字母的TLD.

原文地址:https://www.jb51.cc/js/152122.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐