избегая вопросительный знак в регулярном выражении JavaScript - PullRequest
74 голосов
/ 21 мая 2009

Мне кажется, это простой вопрос.

Я пытаюсь найти вхождение строки в другую строку, используя регулярное выражение в JavaScript, например:

 var content ="Hi, I like your Apartment. Could we schedule a viewing? My phone number is: ";

 var gent = new RegExp("I like your Apartment. Could we schedule a viewing? My", "g");

 if(content.search(gent) != -1){   
     alert('worked');     
 }          

Это не работает из-за символа ? .... Я пытался экранировать его с помощью \, но это тоже не работает. Есть ли другой способ использовать ? буквально вместо специального символа?

Ответы [ 4 ]

122 голосов
/ 21 мая 2009

Вам нужно убежать с двумя обратными слешами

\\?

См. Это для более подробной информации:

http://www.trans4mind.com/personal_development/JavaScript/Regular%20Expressions%20Simple%20Usage.htm

18 голосов
/ 21 мая 2009

Вы должны использовать двойную косую черту:

var regex = new RegExp("\\?", "g");

Почему? потому что в JavaScript \ также используется для экранирования символов в строках, поэтому: "\?" становится: "?"

А "\\?", становится "\?"

15 голосов
/ 21 мая 2009

Вы можете разделить свое регулярное выражение косыми чертами вместо кавычек и затем одной обратной косой чертой, чтобы избежать знака вопроса. Попробуйте это:

var gent = /I like your Apartment. Could we schedule a viewing\?/g;
4 голосов
/ 02 февраля 2016

Всякий раз, когда у вас есть известный шаблон (т. Е. Вы не используете переменную для построения RegExp), используйте литерал регулярное выражение, где вам нужно использовать только single обратные косые черты для экранирования специальных метасимволов регулярных выражений:

var re = /I like your Apartment\. Could we schedule a viewing\?/g;
                               ^^                            ^^

Всякий раз, когда вам нужно построить RegExp динамически, используйте RegExp запись конструктора , где вы ДОЛЖНЫ удвоить обратную косую черту, чтобы обозначить буквальную обратную косую черту :

var questionmark_block = "\\?"; // A literal ?
var initial_subpattern = "I like your Apartment\\. Could we schedule a viewing"; // Note the dot must also be escaped to match a literal dot
var re = new RegExp(initial_subpattern + questionmark_block, "g");

Обязательно читать: RegExp: Описание в MDN.

...