Показать сообщение отдельно
  #12 (permalink)  
Старый 29.10.2011, 01:07
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

о. ручонки добрались :)

интересно с регами повозиться, но для меня(или всех) это адски сложно.

таки сделал

вот рега

Цитата:
/(?:<(\w+)(.*?)(?:(?:src=")|>))?\s*((?:http:\/\/)?(?:www)?((?:\w+\.)+\w+)(?:\/\w+(?:\.\w+)?)*(?:\?[\w\d%=&,\.;]+)?)\s*("|<)?/gi
есть массив , в которых содержатся строки имён тегов, внутри которых заменять текст (адрес) на ссылки не надо

это хранится так :
prohibited = ['a','img'];

после первого запуска все строки преобразуются в регулярные выражения с флагом i (игнорирования регистра).

т.е. можно сделать из этого функцию и прогонять ею поступивший, к примеру, через ajax html.

полный текст скрипта :
prohibited = ['a','img'];
a=/(?:<(\w+)(.*?)(?:(?:src=")|>))?\s*((?:http:\/\/)?(?:www)?((?:\w+\.)+\w+)(?:\/\w+(?:\.\w+)?)*(?:\?[\w\d%=&,\.;]+)?)\s*("|<)?/gi;

b=function(a, tagname,attrs, url, domain, end){ 
    
    for(var i=0;i<prohibited.length;i++) {
        if(typeof prohibited[i]=="string")
            prohibited[i] = new RegExp(prohibited[i],'i');
        if(prohibited[i].test(tagname))
            return a;
    };

    url = url.replace(/&amp;/g,'&');
    
return (tagname?('<'+tagname+(attrs||'')+'>'):'')+domain.link(url)+(end||'');
};

document.body.innerHTML = document.body.innerHTML.replace(a,b);


примеры:

1.jsfiddle (работающий пример)
2.
Пример: примерочная в данный момент не работает
это было уже ссылкой<br>
<a href="http://google.ru">href to <b>www.google.ru</b></a>
<hr>
<u>ссылки текстом</u>
<br>
просто ссылка текстом на vk.ru<hr>

и на гугл карту <br>
http://maps.google.ru/maps/place?q=59.944215,30.307012

<hr>
ссылка текстом в элементе с атрибутами
<br>
<i onclick="alert('Приятного просмотра');">http://wiki.winehq.org/UsefulRegistryKeys</i>

<script>
prohibited=["a","img"];
a=/(?:<(\w+)(.*?)(?:(?:src=")|>))?\s*((?:http:\/\/)?(?:www)?((?:\w+\.)+\w+)(?:\/\w+(?:\.\w+)?)*(?:\?[\w\d%=&,\.;]+)?)\s*("|<)?/gi;b=function(f,d,g,e,h,i){for(var c=0;c<prohibited.length;c++)if(typeof prohibited[c]=="string"&&(prohibited[c]=RegExp(prohibited[c],"i")),prohibited[c].test(d))return f;e=e.replace(/&amp;/g,"&");return(d?"<"+d+(g||"")+">":"")+h.link(e)+(i||"")};document.body.innerHTML=document.body.innerHTML.replace(a,b);
</script>


UPD. хм. да. будут сниматься обработчики. ну что же, переделаем :) рега уже есть

Последний раз редактировалось melky, 29.10.2011 в 01:09. Причина: косяк.
Ответить с цитированием