Keep it simple! Di 'quello che non puoi avere, piuttosto che quello che puoi avere :)
Come accennato in precedenza, gli URL possono essere piuttosto complessi, soprattutto dopo il "?", E non tutti iniziano con un "www". per esempiomaps.bing.com/something?key=!"£$%^*()&lat=65&lon&lon=20
Quindi, piuttosto che avere una regex complessa che non soddisferà tutti i casi limite e sarà difficile da mantenere, che ne dici di questo molto più semplice, che funziona bene per me in pratica.
Incontro
http(s):// (anything but a space)+
www. (anything but a space)+
Dove "tutto" è [^'"<>\s]
... fondamentalmente una partita golosa, continuando a incontrarti con uno spazio, una citazione, una parentesi angolare o una fine della linea
Anche:
Ricorda di verificare che non sia già in formato URL, ad es. Il testo contiene href="..."
osrc="..."
Aggiungi ref = nofollow (se appropriato)
Questa soluzione non è "buona" come le librerie sopra menzionate, ma è molto più semplice e funziona bene nella pratica.
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
non sia commentato, una spiegazione di ciò che sta facendo sarebbe utile.Autolinker.js
è commentato molto bene e ha dei test. Anche laurlize.js
biblioteca collegata nella risposta di Vebjorn Ljosa sembra ricca di funzionalità e ben mantenuta, sebbene non abbia test.