Подтвердить что ты не робот

Экранирование вопросительного знака в regex javascript

Это простой вопрос, который я думаю.

Я пытаюсь найти появление строки в другой строке, используя regex в 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');     
 }          

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

4b9b3361

Ответ 2

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

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

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

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

Ответ 3

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

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

Ответ 4

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

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.