У меня есть два выражения Regex, каждый из которых находит URL-адреса, например http://www.google.com или ссылки на изображения, такие как https://www.google.com/images/srpr/logo11w.png.
Это находит URL-адреса, например http://www.google.com.
/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig
И этот находит URL-адреса с расширениями изображений, такими как https://www.google.com/images/srpr/logo11w.png
/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])+\.(?:jpe?g|gif|png)/ig;
У меня есть функция, которая выглядит, как текст, и заменяет URL-адреса <a href="...">...</a>
и <img src="...">
следующим образом:
function replaceURLWithHTMLLinks(text) {
var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
var exp2 = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])+\.(?:jpe?g|gif|png)/ig;
var links = text.replace(exp,"<a href='$1' target='_blank'>$1</a>");
var images = links.replace(exp2, "<img src='$1' alt='$1'>");
return images;
}
Проблема в том, что если у меня есть текст, который содержит URL-адреса изображений, он находит URL-адрес в первом запуске и заменяет его ссылкой, а затем заменяет часть ссылки во второй части, нарушая ее.
Это лучше всего объясняется в этой скрипке: http://jsfiddle.net/BenedictLewis/m4H9B/2/
Используйте внешний вид для поиска окружающих котировок
var exp = /((https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])(?=([^"']*["'][^"']*["'])*[^"']*$)/ig;
Пример: http://jsfiddle.net/S9TbH/1/