Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Отлов адресов в тексте (https://javascript.ru/forum/misc/42162-otlov-adresov-v-tekste.html)

TylerDurden 15.10.2013 15:12

Отлов адресов в тексте
 
Здравствуйте, столкнулся с таким моментом
необходимо в сообщении найти все урлы и преобразовать в ссылки ..

пишу код:

var mess = data['mess'];

var url = /(([A-Za-z]{3,9}):\/\/)*?([-;:&=\+\$,\w]+@{1})?(([-A-Za-z0-9]+\.)+[A-Za-z]{2,3})(:\d+)?((\/[-\+~%/\.\w]+)?\/?([&?][-\+=&;%@\.\w]+)?(#[\w]+)?)?/igm

var linkReplace = mess.match(url);

var mess = mess.replace(linkReplace, '<a href=' + linkReplace + '>' + linkReplace + '</a>');



Регулярка отрабатывает и находит первое вхождение (например: www.google.com).
Но если например в сообщении два адреса (www.google.com, www.google.com), то уже не отрабатывает ни одно вхождение.

В чем может быть дело? В регулярке поставил флаги и глобального поиска и построчного ... все равно только одно вхождение ...

Спасибо.

danik.js 15.10.2013 15:18

.match() возвращает массив какбэ. А replace принимает аргументом либо строку либо регулярку. Смотри доки по replace'у .

BETEPAH 15.10.2013 15:39

var mess = 'Но если например в сообщении два адреса [url]http://www.google.com[/url] и [url]http://www.google.com[/url] то уже не отрабатывает ни одно вхождение';
var url = /((([A-Za-z]{3,9}):\/\/)*?([-;:&=\+\$,\w]+@{1})?(([-A-Za-z0-9]+\.)+[A-Za-z]{2,3})(:\d+)?((\/[-\+~%/\.\w]+)?\/?([&?][-\+=&;%@\.\w]+)?(#[\w]+)?)?)/igm;
mess = mess.replace(url, '<a href="$1">$1</a>');
alert(mess)

регулярное выражение на вашей совести :)
P.S. форум оборачивает ссылку в bbcode даже в теге js? Странно

TylerDurden 15.10.2013 16:49

Спасибо буду дальше пробовать ..

TylerDurden 16.10.2013 10:39

да, действительно проблемы была в типах данных ... я когда в replace передал строку (регулярку) то сразу наличие несколько линков начали отрабатывать

var url = /(([A-Za-z]{3,9}):\/\/)*?([-;:&=\+\$,\w]+@{1})?(([-A-Za-z0-9]+\.)+[A-Za-z]{2,3})(:\d+)?((\/[-\+~%/\.\w]+)?\/?([&?][-\+=&;%@\.\w]+)?(#[\w]+)?)?/igm

var linkReplace = mess.match(regUrl);

var mess = mess.replace(url, '<a href=' + linkReplace + ' target="_blank" style="color:#fff;">xxx</a>');


но возникла другая проблема, у меня теперь в href любого линка подставляется сразу все существующие ссылки на странице ...
то есть сообщение ввида "www.google.com и www.ya.ru" в двух ссылках в хрефе вернет href="www.google.com,www.ya.ru"

что не так?

Спасибо.

рони 16.10.2013 10:46

TylerDurden,
вы определитесь массив перезаписывать или строку.

TylerDurden 16.10.2013 10:50

просто если я в href передам "url" (регулярку) она не отрабатывает и не преобразуется ... как иначе тогда ..

BETEPAH 16.10.2013 11:11

Цитата:

Сообщение от TylerDurden
просто если я в href передам "url" (регулярку) она не отрабатывает и не преобразуется ... как иначе тогда ..

Запустите в консоли код из третьего комментария. Всё там отрабатывает и преобразуется
Цитата:

Сообщение от danik.js
Смотри доки по replace'у


danik.js 16.10.2013 12:42

TylerDurden, тебе дали рабочий код. Ты его переделал по-своему и жалуешься что он не работает? Ну и каким словом это назвать?

TylerDurden 16.10.2013 14:42

Да, он действительно работает, не понимаю куда я смотрел ...
Я не жалуюсь.., просто задаю вопросы, спасибо большое за помощь вам!


Часовой пояс GMT +3, время: 01:08.