複雑にしないでおく!あなたが持つことができるものではなく、あなたが持つことができないものを言ってください:)
前述のように、URL は非常に複雑になる可能性があり、特に「?」の後では、すべてが「www.」で始まるわけではありません。例えばmaps.bing.com/something?key=!"£$%^*()&lat=65&lon&lon=20
したがって、すべてのエッジケースを満たさず、維持するのが難しい複雑な正規表現を使用するのではなく、実際には私にとってうまく機能する、このはるかに単純な正規表現はどうですか.
マッチ
http(s):// (anything but a space)+
www. (anything but a space)+
「何でも」は[^'"<>\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;