о. ручонки добрались :)
интересно с регами повозиться, но для меня(или всех) это адски сложно.
таки сделал
вот рега
Цитата:
|
/(?:<(\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(/&/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(/&/g,"&");return(d?"<"+d+(g||"")+">":"")+h.link(e)+(i||"")};document.body.innerHTML=document.body.innerHTML.replace(a,b);
</script>
UPD. хм. да. будут сниматься обработчики. ну что же, переделаем :) рега уже есть