Бесстыдный плагин: Вы можете посмотреть здесь ( регулярное выражение заменяет слово ссылкой ) для вдохновения.
Вопрос, заданный для замены какого-либо слова на определенную ссылку, если только ссылки не было. Так что проблема у вас более или менее та же самая.
Все, что вам нужно, это регулярное выражение, которое соответствует URL (вместо слова). Самое простое предположение было бы таким: URL (необязательно) начинается с "http://"
, "ftp://"
или "mailto:"
и длится до тех пор, пока нет пробелов, разрывов строк, скобок тегов или кавычек).
Осторожно, впереди длинное регулярное выражение. Применить без учета регистра.
(href\s*=\s*['"]?)?((?:http://|ftp://|mailto:)?[^.,<>"'\s\r\n\t]+(?:\.(?![.<>"'\s\r\n])[^.,!<>"'\s\r\n\t]+)+)
Имейте в виду - это также будет соответствовать URL-адресам, которые технически недействительны, и будет распознавать в качестве URL-адреса things.formatted.like.this. Это зависит от ваших данных, если они слишком нечувствительны. Я могу точно настроить регулярное выражение, если у вас есть примеры, когда он возвращает ложные срабатывания.
Регламент создаст две группы совпадений. Группа 2 будет содержать соответствующую вещь, которая, скорее всего, является URL. Группа 1 будет содержать либо пустую строку, либо 'href="'
. Вы можете использовать его как индикатор того, что это совпадение произошло внутри параметра href существующей ссылки, и вам не нужно прикасаться к нему.
Как только вы подтвердите, что это правильно для вас большую часть времени (с данными, предоставленными пользователем, вы никогда не можете быть уверены), вы можете сделать все остальное в два этапа, как я и предлагал в другой вопрос:
- Создайте ссылку вокруг каждого URL-адреса (, если не найдет что-то в группе совпадений 1!). создаст двойные вложенные теги
<a>
для вещей, которые уже имеют ссылку .
- Сканирование на наличие неправильно вложенных тегов
<a>
, удаление самой внутренней