Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Текстовые ссылки в гиперссылки (https://javascript.ru/forum/misc/5508-tekstovye-ssylki-v-giperssylki.html)

Verst 20.10.2009 01:16

Текстовые ссылки в гиперссылки
 
Доброго времени суток.
Пишу скрипт для IE7Pro (аналог greasemonkey). Есть браузерная игра, в ней чат. Хочется что бы ссылки которые кидаются в чат, становились кликабельными. Весь код почти написал, но возникла проблема с регулярными выражениями, для обнаружения ссылок в тексте.

setInterval(ppp, 3000)
	var rr;
	function ppp(){
	var frames = window.frames;
	elm = frames[3].document.frames[0].document.getElementById("hint3");
	if(rr != elm.innerHTML){
	uuu = elm.outerHTML;
	elm.innerHTML=mmm(uuu);
	rr = elm.innerHTML;
	}
    }

    function mmm(text){
    	var s="";
    	var spl=text.split("<BR>");
	    for (var k=0; k<spl.length; k++){
	      var txt=spl[k];
	      	  s+=txt.replace(/(http\:\/\/имя_сайта.org)+(.*\s)$/g, '<a href="$1$2" target="_blank">$1$2</a>');
		      }
		      s+='<BR>';
	      }
	   return s;
    }

Скорее всего код кривой (только начинаю изучать JS), но он работает :D

И так суть проблемы: при отправке сообщения в чат в виде ссылки с добавлением в конец строки пробела, скрипт срабатывает и отображает ссылку в чате. Но если не поставить пробел в чат выводится ссылка с добавлением тега </span>. Собственно сам вопрос, как правильно составить регулярное выражение что бы не включался этот тег.

P.S. может кто сможет еще подсказать регулярное выражение, что бы в тексте находился не только конкретный сайт но любой другой, НО в чате есть смайлы и если в чат отправить ссылку на игру, то смайл отображаться перестанет из-за изменения адреса.

P.S.S Читал этот топик, но решения не смог найти :( и после двух дней поисков решил обратиться к спецам. :help:

Спасибо за внимание.

Verst 22.10.2009 15:37

ап

Riim 22.10.2009 15:57

RegExp.url = '(?:(?:https?|ftp)://)?(?:[0-9a-z][\\-0-9a-z]*[0-9a-z]\\.)+[a-z]{2,6}(?::\\d{1,5})?(?:/[?!$.():=\'+\\-;&~#@,%*\\wА-Яа-я]+)*/?';


'v-url': ['Требуется url адрес! Пример: www.mysite.ru', function(value) {
	return !value || (new RegExp('^' + RegExp.url + '$', 'i')).test(value);
}],

e1f 22.10.2009 19:43

Riim,
Заинтересовался, порылся:
http://geekswithblogs.net/casualjim/.../01/61722.aspx

Riim 22.10.2009 21:02

До конца еще не досмотрел, но вроде интересный вариант.
Про ftps я что-то не подумал. Только вот разве можно сначала "~/" а потом "(?#Username:Password)(?:\w+:\w+@)?" ? Получится что такой url правильный: ~/name:wpass@domen.ru/ . И он же: http://subdomen.name:wpass@domen.ru/ .

e1f 23.10.2009 15:11

А первый неправильный? Просто я как-то не сталкивался с такой авторизацией :)

Riim 23.10.2009 16:51

Цитата:

Сообщение от e1f
Просто я как-то не сталкивался с такой авторизацией

на ftp к хостингу обычно так.

Цитата:

Сообщение от e1f
А первый неправильный?

не знаю, но выглядит не очень.

x-yuri 23.10.2009 17:18

я бы отталкивался от rfc, так как там есть BNF, и, кроме того, регулярное выражение для парсинга URI

e1f 23.10.2009 18:54

x-yuri, спасибо, почитаю как-нибудь на досуге.

x-yuri 26.10.2009 01:04

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


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