2014-01-14 4 views
0

В Perl существует функция с именем quotemeta, которая принимает строку и возвращает шаблон регулярного выражения, соответствующий этой строке.Экранирование текста для регулярного выражения

Использовать quotemeta при динамическом построении рисунка. Например,

"^"+quotemeta(var)+"_\\d+$" 

Реализация JavaScript следующим образом:

function quotemeta(s) { 
    return String(s).replace(/\W/g, "\\$&"); 
} 

ли JavaScript или JQuery уже есть такая функция?

+0

@ p.s.w.g Я уже знаю, что можно написать собственное решение. Мой вопрос заключается в том, существует ли уже в JS или jQuery. Я посмотрел, но я хочу дважды проверить. Не дубликат. – ikegami

+0

Как вы говорите, кэметата Перла - '[^ \ w]'. Это действительно опасно, если текст должен быть введен в регулярное выражение. Лучше избегать 12 мета-неклассов и 4 метакласса вместо этого, то есть если он переходит к части строки регулярного выражения. – sln

+0

@sln, назад. Гораздо безопаснее избегать всего, что может потребоваться для ускорения (белый список), а не для определения того, что нужно избегать в каждой реализации (черный список). – ikegami

ответ

3

JavaScript не имеет такого метода изначально. (И jQuery не включает один)

Обычно, при поиске строки pattenr, вы должны использовать String.prototype.indexOf. Этот метод находит строку в строке, поэтому вам даже не нужно будет преобразовывать шаблон строки в регулярное выражение.

String.prototype.replace также может принимать строковый рисунок.

Это не совсем то же самое, но оно будет работать для большинства случаев использования строк.

+0

Вы должны использовать 'quotemeta' при построении шаблона (например,' '^" + quotemeta (var) + "_ \\ d + \\ z" ') – ikegami

+1

Несомненно, это не то же самое. Я указывал на потенциальное решение, которое работает для большинства случаев использования. –

Смежные вопросы