нужно обернуть в тег а все вхождения по регулярке, но не заменять в уже готовых тегах а
написал следующее
function replaceURLsInMessage(text){
text = text.replace(/(?])(http(s)?:\/\/)?(www\.)?([-a-zA-Z0-9@:%._\+~#=]{2,256}\.(?!gif|png|jpg)[a-z]{2,6}\b)([-a-zA-Z0-9@:%_\+.~#?&//=]*)(?!["<])/g, '$&');
return text;
}
во первых js ругается на регулярку
во вторых, регулярка не работает если внутри тега а написана ссылка посреди текста.
второе то ладно, в приоритете первый пункт
прилагаю пример текста
fadsgfads
Смотрите в vk.com подробнее
фывафывафыва
вафывафыва
афвыафыва м vk.com
фывафыва
вызов осуществляется следующим образом по клике на кнопку
$this.html(replaceURLsInMessage($this.html()))
в результате ожидаю увидеть следующее
fadsgfads
Смотрите в vk.com подробнее
фывафывафыва
вафывафыва
афвыафыва м vk.com
фывафыва
то есть первая ссылка осталось не тронутая, а вторая - та что была текстом, стала ссылкой, ссылка и в href и внутри самого тега а
Ответ
Если хотите пользоваться регулярным выражением, можно воспользоваться захватывающими подмасками и анализировать внутри анонимного метода захваченные тексты, а потом и решать, что с ними делать.
$("div").each(function() {
$(this).html($(this).html().replace(/[^<]*<\/a>|((?:https?:\/\/)?(?:www\.)?([-a-zA-Z0-9@:%._+~#=]{2,256}\.(?!gif|png|jpg)[a-z]{2,6}\b)[-a-zA-Z0-9@:%_+.~#?&\/=]*)/ig, function($0, $1) {
return $1 ? '' + $1 + '' : $0;
}));
});
Т.е. с помощью [^<]*<\/a> можно отловить уже готовые ссылки с тегами, а с помощью Вашего выражения (но уже в (...)) можно найти ссылки без тегов. Если подмаска №1 найдена ($1 ?), надо добавить теги. Если нет, просто вставляем обратно полное совпадение $0
Комментариев нет:
Отправить комментарий