Вставить изображения и конвертировать текст в ссылки

0

У меня есть два выражения 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/

Теги:

1 ответ

0

Используйте внешний вид для поиска окружающих котировок

var exp = /((https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])(?=([^"']*["'][^"']*["'])*[^"']*$)/ig;

Пример: http://jsfiddle.net/S9TbH/1/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню