RegEx соответствует специальным символам

1

У меня есть условие string.match, которое работало, пока я не понял, что некоторые слова являются "персональными (компьютерными)", имеют специальные символы, такие как круглые скобки в слове. Например, мой код захватывает термин для сравнения с "персональным (компьютером)" и ищет данные, чтобы найти любой экземпляр этого, но используя

string1.match(stringtarget,"ig"); //returns null 

Я начинаю с регулярным выражением, так как я могу исправить это, чтобы работать и для специальных символов.

Теги:

2 ответа

2
Лучший ответ

Если вам не нужны функции регулярного выражения, вы можете использовать indexOf:

if (string1.toLowerCase().indexOf(stringtarget.toLowerCase()) >= 0) {
    // It in there
}

В противном случае (и я предполагаю, что вы используете match по какой-то причине!), вам нужно предварительно обработать stringtarget, чтобы избежать каких-либо специальных символов.

Например, это функция, которую я использовал в недавнем проекте, чтобы сделать именно это, что вдохновлено аналогичной функцией PHP:

if (!RegExp.escape) {
    (function() {
        // This is drawn from http://phpjs.org/functions/preg_quote:491
        RegExp.escape = RegExp_escape;
        function RegExp_escape(str) {
            return String(str).replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!<>\|\:])/g, '\\$1');
        }
    })();
}

И так:

var match = string1.match(RegExp.escape(stringtarget),"ig");
  • 0
    Я не могу предварительно обработать stringtarget для экранирования специальных символов, потому что тогда мне придется делать это для каждого фрагмента данных, с которым я сравниваю его, и пытался избежать этого
  • 0
    @ Джейк: Если я правильно тебя понимаю, ты не сможешь этого избежать. Если вы хотите использовать строку, которая может содержать что-либо как источник регулярного выражения, вы должны сначала экранировать специальные символы в этой строке. Обратите внимание, что это относится только к строке, определяющей регулярное выражение, а не к строкам, которые вы сопоставляете с ним.
Показать ещё 2 комментария
0

Вы можете использовать preg_quote порт javascript, чтобы избежать символов, специфичных для регулярного выражения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню