Tetap sederhana! Katakan apa yang tidak bisa Anda miliki, daripada apa yang bisa Anda miliki :)
Seperti disebutkan di atas, URL bisa sangat kompleks, terutama setelah '?', Dan tidak semuanya dimulai dengan 'www.' misalnyamaps.bing.com/something?key=!"£$%^*()&lat=65&lon&lon=20
Jadi, daripada memiliki regex kompleks yang tidak akan memenuhi semua kasus tepi, dan akan sulit untuk mempertahankan, bagaimana dengan yang jauh lebih sederhana ini, yang bekerja dengan baik untuk saya dalam praktik.
Pertandingan
http(s):// (anything but a space)+
www. (anything but a space)+
Di mana 'apa pun' berada [^'"<>\s]
... pada dasarnya pertandingan serakah, membawa Anda bertemu spasi, kutipan, braket sudut, atau akhir baris
Juga:
Ingatlah untuk memeriksa bahwa itu belum dalam format URL, misalnya teks berisi href="..."
atausrc="..."
Tambahkan ref = nofollow (jika sesuai)
Solusi ini tidak sebagus perpustakaan yang disebutkan di atas, tetapi jauh lebih sederhana, dan bekerja dengan baik dalam praktiknya.
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
tidak berkomentar, beberapa penjelasan tentang apa yang dilakukannya akan sangat membantu.Autolinker.js
berkomentar dengan sangat baik dan memiliki tes. Theurlize.js
perpustakaan terkait dalam jawaban Vebjorn Ljosa ini juga terlihat featureful dan terawat dengan baik, meskipun tidak memiliki tes.