作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用下面的函数来匹配给定文本中的 URL 并将其替换为 HTML 链接。正则表达式运行良好,但目前我只替换第一个匹配项。
如何替换所有网址?我想我应该使用 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 主机名等。
我看过a ton的libraries ,尽管有一些缺点,但还是有一些值得使用的:
href
属性”)。当 demo becomes available 时,我会对它进行一些测试。 .我很快就取消了执行此任务资格的图书馆:
如果你坚持使用正则表达式,最全面的是 URL regexp from Component ,尽管它会通过查看它来错误地检测到一些不存在的两字母 TLD。
关于javascript - 如何用链接替换普通 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8025039/
我是一名优秀的程序员,十分优秀!