Исключить из регулярки изображения (Javascript)

Статус
В этой теме нельзя размещать новые ответы.

Wertos

Пьянь местная
Регистрация
13 Апр 2007
Сообщения
178
Реакции
39
Javascript
Вот такой код оборачивает ссылки в хайд, но как исключить из регулярки ссылки на изображения ?
Код:
var re = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gi;
var subst = '[hide][url=$1]$1[/url][/hide]';
var link = text.replace(re, subst);
Спасибо.
 
Именно из регулярки исключить? Тебе нужно сперва из ссылки выдрать значение атрибута href: "$(this).attr('href')".
Получить расширение файла:
Код:
var fileUrl = $('#id .class').attr('href'),
    parts, ext = ( parts = fileUrl.split("/").pop().split(".") ).length > 1 ? parts.pop() : "";
В ext получим расширение файла.
Дальше делаем проверки:
Код:
var exts = ['jpg','jpeg','png']; // создаем массив с нужными расширениями изображений из ссылки
if (ext in exts) {
    var re = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gi;
    var subst = '[hide][url=$1]$1[/url][/hide]';
    var link = text.replace(re, subst);
}

Конечная результат, который бы у меня получился:
HTML:
$(function () {
    $('body').find('a').each(function() { // ищем все ссылки в тэгах <a></a>
        var url = this.attr('href'),
            parts, ext = ( parts = url.split("/").pop().split(".") ).length > 1 ? parts.pop() : "",
            exts = ['jpg','jpeg','png']; // создаем массив с нужными расширениями изображений из ссылки
        if (!(ext in exts)) {
            var re = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gi;
            var subst = '[hide][url=$1]$1[/url][/hide]';
            var link = text.replace(re, subst);
        }
    });
});
 
Мне из textarea, перед отправкой формы. Все ссылки обернуть в хайд, но исключить рисунки.
each в дереве ищет... У меня вот такой код
HTML:
<html>
<head>
<script type="text/javascript">
function hidelink()
{
var text = document.getElementById('text').value
alert(text);
var re = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gi;
var subst = '[hide][url=$1]$1[/url][/hide]';
var withlink = text.replace(re, subst);
alert(withlink);
//return withlink;
}
</script>
</head>
<body>
aefef
<textarea id="text" style="width: 300px; height: 200px;">
wrhger
http://fishki.net/1914832-smeshnye-kartinki-s-nadpisjami-10042016.html?mode=recent dfgbdegehgerh

[img]http://savepic.biz/img/2016-04/10/0hsftmf3lix73dayi02f6360g.png[/img]
</textarea>
<br />
<input type="button" value="go-go-go" onClick="hidelink();" />
</body>
</html>
Первая ссылка прячется в хайд, вторая пролетает без изменений
 
Например так
HTML:
<html>
<head>
<script type="text/javascript">
function hidelink()
{
var text = document.getElementById('text').value
alert(text);
var re = /[^\[h]+|(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])|h|\[img\][\s\S]*\[\/img\]/gi;
var subst = '[hide][url=$1]$1[/url][/hide]';
//var withlink = text.replace(re, subst);
var withlink = text.replace(re, function(m0, m1) {
return typeof m1 == "string" && m1.length ? '[hide][url='+m1+']'+m1+'[/url][/hide]' : m0;
});
alert(withlink);
//return withlink;
}
</script>
</head>
<body>
aefef
<textarea id="text" style="width: 300px; height: 200px;">
wrhger
http://fishki.net/1914832-smeshnye-kartinki-s-nadpisjami-10042016.html?mode=recent dfgbdegehgerh

[img]http://savepic.biz/img/2016-04/10/0hsftmf3lix73dayi02f6360g.png[/img]
</textarea>
<br />
<input type="button" value="go-go-go" onClick="hidelink();" />
</body>
</html>
 
Последнее редактирование:
Я так понимаю там в зависимости от браузера будет пустая строка или undefined.
Если заменить
return m1.length
на
return typeof m1 == "string" && m1.length
 
Работает, НО если
Код:
[url]http://fishki.net/1914832-smeshnye-kartinki-s-nadpisjami-10042016.html?mode=recent[/url]
вот такой попадается код, то функция его портит, с моим вариантом работало.
Блин я уже всю башку сломал с этой регуляркой...
 
Можно добавить в исключения и тег [ url ]
Код:
var re = /[^\[h]+|(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])|h|\[img\][\s\S]*?\[\/img\]|\[url\][\s\S]*?\[\/url\]/gi;
 
Последнее редактирование:
Можно добавить в исключения и тег [ url ]
Работает !!
А можно ещё в исключения добавить url=любые символы ?
Код:
[url=http://google.com]http://google.com[/url]
Что бы вот такое не цеплял
 
Код:
var re = /[^\[h]+|(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])|h|\[(img|url)[\s\S]*?\[\/\3\]/gi;
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху