регулярка javascript

Тема в разделе "Регулярные выражения", создана пользователем ZiX, 1 май 2015.

Модераторы: xpert13
  1. ZiX

    ZiX Коддинг, Парсинг

    Moderator
    Регистр.:
    9 июл 2011
    Сообщения:
    1.387
    Симпатии:
    575
    Смысл следующий... через :contains ищутся имена валют. варианты руб, eur., $.
    Код:
    $('input#wholesale_price, input#priceTE, input#priceTI, input#unit_price, input#sp_price').
                            parents('table').first().find('tr').not('.nn').find(':contains("'+ pc_data[def_currency].sign +'")').each(function(){
                        var html = $(this).html();
                        var regex = new RegExp(pc_data[def_currency].sign, 'ig');
                        var html_replace = html.replace(pc_data[def_currency].sign, sign_val)
                        $(this).html(html_replace);
                    });
    Вот код. Всё работает нормально пока на месте pc_data[def_currency].sign
    не попадается $.
    в regexp определяется как конец строки. я бы экранировал но сложность в том что pc_data[def_currency].sign принимает значения руб, eur., $. а может и ещё 10 других.
    и получается что регулярка /eur./gi работает, а /$/gi нет... подскажите как выйти из ситуации.
     
  2. Mr.Emm

    Mr.Emm Постоялец

    Регистр.:
    5 май 2008
    Сообщения:
    145
    Симпатии:
    108
    экранируй нужные символы перед тем как подставить в шаблон...
    var reg = pc_data[def_currency].sign.replace('$','\$');
     
  3. ZiX

    ZiX Коддинг, Парсинг

    Moderator
    Регистр.:
    9 июл 2011
    Сообщения:
    1.387
    Симпатии:
    575
    это понятно, а универсального нет решения? как экранировать то я в крсе)
     
  4. Mr.Emm

    Mr.Emm Постоялец

    Регистр.:
    5 май 2008
    Сообщения:
    145
    Симпатии:
    108
    Всмисле, из вопроса понятно только что нужно заэкранировать спецсимвол, что еще?
     
  5. ZiX

    ZiX Коддинг, Парсинг

    Moderator
    Регистр.:
    9 июл 2011
    Сообщения:
    1.387
    Симпатии:
    575
    это решение только для доллара. в 1 сообщении я писал. я бы экранировал но сложность в том что pc_data[def_currency].sign принимает значения руб, eur., $. а может и ещё 10 других. нельзяли чего-то универсального? вдруг ещё чтото)
     
  6. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    192
    Симпатии:
    233
    Экранировать нужно не так уж много спецсимволов.
    Код:
    str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");