Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Замена одинаковых ссылок в тексте (https://javascript.ru/forum/misc/42643-zamena-odinakovykh-ssylok-v-tekste.html)

TylerDurden 04.11.2013 13:11

Замена одинаковых ссылок в тексте
 
Здравствуйте, у меня есть код, который весь текст урло подобный обромляет в тег <a>.

var mess = data['msgText'];

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

var regHttp = /http/igm;

for(var key in pregMatch){
	var val = pregMatch[key];
	if(regHttp.test(val) == true){
		mess = mess.replace(val, '<a href="' + val + '>' + val + '</a>');
	}else{
		mess = mess.replace(val, '<a href="http://' + val + '>' + val + '</a>');
	}
}



Проблема в том, что передавая в mess сообщение типа
"ya.ru, www.google.com" обрамляются в тег и отрабатывают нормально

НО

если в mess присутствует например две полностью одинаковых ссылки типа "www.google.com, www.google.com", то уже работает не корректно, т. к. он в первый заход делает правильно замену, во второй - опять же ещё раз первую позицию пытается заменить ...

Может быть есть какие-то очевидные варианты реализации ..

За любую помощь буду благодарен,
Спасибо.

danik.js 04.11.2013 13:53

Цитата:

Сообщение от TylerDurden
Может быть есть какие-то очевидные варианты реализации ..

Очевидный вариант - сразу использовать регулярку первым аргументом в replace (тогда надобность match'а отпадает)

TylerDurden 04.11.2013 14:47

Он тогда после реплейса выдает регулярку ...

вот пример живой, что бы было понятней

http://jsfiddle.net/qGXjh/1/

danik.js 04.11.2013 16:36

Я не вижу там реплейса с регуляркой, зато вижу матч по-прежнему...

TylerDurden 04.11.2013 18:00

http://jsfiddle.net/zWznS/3/

да вот с чистым реплейсом без матча ..
работает, но в коде есть момент - текстовым ссылкам без http:// добавлять его ...
подскажите тогда как правильно делать в данном случае, т. к. с массивом (мачем) я сделал, как тогда без него?

danik.js 04.11.2013 19:26

... а вторым аргументом - функцию.


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