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