Dzięki, to było bardzo pomocne. Chciałem też czegoś, co łączyłoby rzeczy, które wyglądały jak adresy URL - jako podstawowy wymóg łączyłoby coś takiego jak www.yahoo.com, nawet jeśli prefiks protokołu http: // nie był obecny. Zasadniczo, jeśli „www”. jest obecny, połączy go i przyjmie, że to http: //. Chciałem też, aby wiadomości e-mail zamieniły się w mailto: linki. PRZYKŁAD: www.yahoo.com zostanie przekonwertowany na www.yahoo.com
Oto kod, na którym się skończyłem (kombinacja kodu z tej strony i innych rzeczy, które znalazłem online i innych rzeczy, które zrobiłem sam):
function Linkify(inputText) {
//URLs starting with http://, https://, or ftp://
var replacePattern1 = /(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim;
var replacedText = inputText.replace(replacePattern1, '<a href="$1" target="_blank">$1</a>');
//URLs starting with www. (without // before it, or it'd re-link the ones done above)
var replacePattern2 = /(^|[^\/])(www\.[\S]+(\b|$))/gim;
var replacedText = replacedText.replace(replacePattern2, '$1<a href="http://$2" target="_blank">$2</a>');
//Change email addresses to mailto:: links
var replacePattern3 = /(\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,6})/gim;
var replacedText = replacedText.replace(replacePattern3, '<a href="mailto:$1">$1</a>');
return replacedText
}
W drugim zastępowaniu część (^ | [^ /]) zastępuje www.whokolwiek.com tylko wtedy, gdy nie jest poprzedzona przedrostkiem // - aby uniknąć podwójnego linkowania, jeśli adres URL był już połączony przy pierwszej zamianie. Możliwe jest również, że www.whokolwiek.com może znajdować się na początku łańcucha, co jest pierwszym warunkiem „lub” w tej części wyrażenia regularnego.
Można to zintegrować jako wtyczkę jQuery, jak zilustrowano powyżej Jesse P. - ale szczególnie chciałem regularnej funkcji, która nie działałaby na istniejącym elemencie DOM, ponieważ pobieram tekst, który mam, a następnie dodam go do DOM, i Chcę, aby tekst był „linkified” przed dodaniem go, więc przekazuję tekst przez tę funkcję. Działa świetnie.
URL regexp from Component
nie zostało to skomentowane, pomocne byłoby wyjaśnienie tego, co robi.Autolinker.js
jest bardzo dobrze skomentowany i ma testy.urlize.js
Biblioteka związana w odpowiedzi Vebjørn Ljosa jest również wygląda potężniejszy i dobrze utrzymane, mimo że nie ma testów.