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

Тема в разделе "Регулярные выражения", создана пользователем Wertos, 10 апр 2016.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. Wertos

    Wertos Пьянь местная

    Регистр.:
    13 апр 2007
    Сообщения:
    159
    Симпатии:
    36
    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);
    
    Спасибо.
     
  2. ykpon

    ykpon

    Регистр.:
    8 дек 2012
    Сообщения:
    254
    Симпатии:
    146
    Именно из регулярки исключить? Тебе нужно сперва из ссылки выдрать значение атрибута 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);
            }
        });
    });
     
  3. Wertos

    Wertos Пьянь местная

    Регистр.:
    13 апр 2007
    Сообщения:
    159
    Симпатии:
    36
    Мне из 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>
    Первая ссылка прячется в хайд, вторая пролетает без изменений
     
  4. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    237
    Симпатии:
    315
    Например так
    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>
     
    Последнее редактирование: 10 апр 2016
    Wertos нравится это.
  5. Wertos

    Wertos Пьянь местная

    Регистр.:
    13 апр 2007
    Сообщения:
    159
    Симпатии:
    36
    Uncaught TypeError: Cannot read property 'length' of undefined
     
  6. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    237
    Симпатии:
    315
    Я так понимаю там в зависимости от браузера будет пустая строка или undefined.
    Если заменить
    return m1.length
    на
    return typeof m1 == "string" && m1.length
     
    Wertos нравится это.
  7. Wertos

    Wertos Пьянь местная

    Регистр.:
    13 апр 2007
    Сообщения:
    159
    Симпатии:
    36
    Работает, НО если
    Код:
    [url]http://fishki.net/1914832-smeshnye-kartinki-s-nadpisjami-10042016.html?mode=recent[/url]
    вот такой попадается код, то функция его портит, с моим вариантом работало.
    Блин я уже всю башку сломал с этой регуляркой...
     
  8. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    237
    Симпатии:
    315
    Можно добавить в исключения и тег [ url ]
    Код:
    var re = /[^\[h]+|(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])|h|\[img\][\s\S]*?\[\/img\]|\[url\][\s\S]*?\[\/url\]/gi;
    
     
    Последнее редактирование: 10 апр 2016
    Wertos нравится это.
  9. Wertos

    Wertos Пьянь местная

    Регистр.:
    13 апр 2007
    Сообщения:
    159
    Симпатии:
    36
    Работает !!
    А можно ещё в исключения добавить url=любые символы ?
    Код:
    [url=http://google.com]http://google.com[/url]
    Что бы вот такое не цеплял
     
  10. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    237
    Симпатии:
    315
    Код:
    var re = /[^\[h]+|(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])|h|\[(img|url)[\s\S]*?\[\/\3\]/gi;
    
     
    Wertos нравится это.
Статус темы:
Закрыта.