谢谢,这很有帮助。我还想要一些可以链接看起来像 URL 的东西——作为基本要求,它会链接类似于 www.yahoo.com 的东西,即使 http:// 协议前缀不存在。所以基本上,如果“www”。存在,它将链接它并假设它是 http://。我还希望电子邮件变成 mailto: 链接。示例:www.yahoo.com 将转换为 www.yahoo.com
这是我最终得到的代码(来自这个页面的代码和我在网上找到的其他东西的组合,以及我自己做的其他东西):
function Linkify(inputText) {
//URLs starting with http://, https://, or ftp://
var replacePattern1 = /(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim;
var replacedText = inputText.replace(replacePattern1, '<a href="$1" target="_blank">$1</a>');
//URLs starting with www. (without // before it, or it'd re-link the ones done above)
var replacePattern2 = /(^|[^\/])(www\.[\S]+(\b|$))/gim;
var replacedText = replacedText.replace(replacePattern2, '$1<a href="http://$2" target="_blank">$2</a>');
//Change email addresses to mailto:: links
var replacePattern3 = /(\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,6})/gim;
var replacedText = replacedText.replace(replacePattern3, '<a href="mailto:$1">$1</a>');
return replacedText
}
在第二次替换中,(^|[^/]) 部分仅替换 www.whatever.com,如果它尚未以 // 为前缀,则避免在第一次替换中已链接 URL 时出现双重链接。此外,www.whatever.com 可能位于字符串的开头,这是正则表达式该部分中的第一个“或”条件。
这可以集成为一个 jQuery 插件,如上面的 Jesse P 所示——但我特别想要一个不作用于现有 DOM 元素的常规函数,因为我正在获取我拥有的文本,然后将其添加到 DOM,并且我希望在添加文本之前“链接”文本,因此我通过此函数传递文本。效果很好。