把事情简单化!说你不能拥有的,而不是你能拥有的:)
如上所述,URL 可能非常复杂,尤其是在“?”之后,而且并非所有 URL 都以“www”开头。例如maps.bing.com/something?key=!"£$%^*()&lat=65&lon&lon=20
因此,与其拥有一个无法满足所有边缘情况并且难以维护的复杂正则表达式,不如使用这个更简单的正则表达式,它在实践中对我来说效果很好。
匹配
http(s):// (anything but a space)+
www. (anything but a space)+
'anything' 是[^'"<>\s]
......基本上是一个贪婪的匹配,继续遇到空格、引号、尖括号或行尾
还:
记得检查它不是已经是 URL 格式,例如文本包含href="..."
或src="..."
添加 ref=nofollow(如果适用)
这个解决方案不像上面提到的库那样“好”,但更简单,并且在实践中运行良好。
if html.match( /(href)|(src)/i )) {
return html; // text already has a hyper link in it
}
html = html.replace(
/\b(https?:\/\/[^\s\(\)\'\"\<\>]+)/ig,
"<a ref='nofollow' href='$1'>$1</a>"
);
html = html.replace(
/\s(www\.[^\s\(\)\'\"\<\>]+)/ig,
"<a ref='nofollow' href='http://$1'>$1</a>"
);
html = html.replace(
/^(www\.[^\s\(\)\'\"\<\>]+)/ig,
"<a ref='nofollow' href='http://$1'>$1</a>"
);
return html;