Дякую, це було дуже корисно. Я також хотів щось, що пов'язувало б речі, схожі на URL - як основна вимога, воно пов'язувало б щось на зразок www.yahoo.com, навіть якщо префіксу протоколу http: // немає. Так в основному, якщо "www." присутній, він зв’яже це і припустить, що це http: //. Я також хотів, щоб електронні листи перетворилися на mailto: посилання. ПРИКЛАД: www.yahoo.com буде перетворений на www.yahoo.com
Ось код, який я закінчив (поєднання коду на цій сторінці та інших речей, які я знайшов в Інтернеті, та інших речей, які я робив самостійно):
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
}
У другій заміні частина (^ | [^ /]) замінює www.wever.com лише тоді, коли вона не є префіксом // - щоб уникнути подвійного посилання, якщо URL-адреса вже була пов’язана в першій заміні. Крім того, можливо, що www.wwhat.com може бути на початку рядка, що є першою умовою "або" у цій частині регулярного виразів.
Це може бути інтегровано як плагін jQuery, як показано вище Jesse P - але я спеціально хотів регулярної функції, яка не діяла на існуючий елемент DOM, тому що я беру текст, який я маю, а потім додаю його до DOM, і Я хочу, щоб текст був "зв'язаний" перед тим, як додати його, тому я передаю текст через цю функцію. Чудово працює.
URL regexp from Component
не коментують, корисне було б якесь пояснення того, що це робиться.Autolinker.js
коментується дуже добре і має тести.urlize.js
Бібліотека пов'язана в відповіді Vebjørn Ljosa в теж виглядає і функціональної добре підтримуються, хоча він не має тестів.