Будьте проще! Скажите, что вы не можете иметь, а не то, что вы можете иметь:)
Как упоминалось выше, URL-адреса могут быть довольно сложными, особенно после «?», И не все из них начинаются с «www». например maps.bing.com/something?key=!"£$%^*()&lat=65&lon&lon=20
Таким образом, вместо того, чтобы иметь сложное регулярное выражение, которое не удовлетворяет всем крайним случаям, и будет трудно поддерживать, как насчет этого гораздо более простого, который хорошо работает на практике.
Match
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;