複雑にしないでおく!あなたが持つことができるものではなく、持つことができないものを言ってください:)
上記のように、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;
URL regexp from Component
コメントされていないのは残念です、それが何をしているのかについてのいくつかの説明が役に立つでしょう。Autolinker.js
非常によくコメントされ、テストがあります。urlize.js
中にリンクされたライブラリ Vebjorn Ljosaの答えは、それがテストを持っていないが、また、高機能とよく維持に見えます。