我正在使用下面的功能来匹配给定文本内的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>");
}
首先,滚动自己的regexp来解析URL是一个糟糕的主意。您必须想象这是一个很常见的问题,根据RFC,有人为此编写,调试和测试了一个库。URI非常复杂 -请在Node.js和URI方案的Wikipedia页面上查看用于URL解析的代码。
解析URL时有很多边缘情况:国际域名,实际(.museum
)与不存在(.etc
)TLD,怪异的标点(包括括号),URL末尾的标点,IPV6主机名等。
href
anchor()标记内的属性”)。演示可用时我会对其进行一些测试。我已迅速被取消此任务资格的图书馆:
如果您坚持使用正则表达式,那么最全面的是Component的URL regexp,尽管它会通过查看错误地检测出一些不存在的两个字母的TLD。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句