【发布时间】:2017-12-30 12:12:56
【问题描述】:
我正在使用这个正则表达式来检测文本字符串中的 URL:
/(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}(\.[a-z]{2,6}|:[0-9]{3,4})\b([-a-zA-Z0-9@:%_\+.~#?&\/\/=]*)/gi
结合此功能,将检测到的字符串替换为链接:
function linkify(text) {
return text.replace(urlRegex, function(url) {
return "<a href=" + url + ">" + url + "</a>";
});
}
两者都在这里找到:Detect URLs in text with JavaScript
这适用于大多数链接,但是诸如 www.fatsoma.com/flatline-cardiff 和
检测到tickets.partyforthepeople.org/events/3633,但无处链接,在检测到的链接前面添加本地路径,例如http://127.0.0.1:8000/filelocation/tickets.partyforthepeople.org/events/3633
这和链接开头没有Https等协议有关吗?
【问题讨论】:
-
浏览器决定在地址栏中隐藏协议前缀,造成了无穷无尽的破坏。有效的完整绝对 URL 必须以
http://、https://或类似名称开头。 -
正则表达式看起来很时髦,我很确定它会同时提供误报和误报。此外,根据上下文,可能需要进行一些解码才能获得实际的 URL。并处理相对 URL 组合。而您的替代品缺少引号以及转义。
-
我注意到您的函数没有引用 href 值。更好的是:
return <a href="${url}">${url}</a>(将文本放在反引号内,我不能在评论中使用它们) -
@jcaron 是的,它给了我一些用省略号分隔的单词的误报。
标签: javascript regex url