escaping ponto de interrogação no regex javascript

Esta é uma pergunta simples, eu acho.

Eu estou tentando procurar a ocorrência de uma string em outra string usando regex em JavaScript assim:

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'); } 

Isso não funciona por causa do ? personagem …. eu tentei escaping com \ , mas isso não funciona. Existe outra maneira de usar ? literalmente em vez de um personagem especial?

Você precisa escaping com duas barras invertidas

 \\? 

Veja isto para mais detalhes:

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

Você deve usar barra dupla:

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

Por quê? porque em JavaScript o \ também é usado para escaping caracteres em strings, então: “\?” torna-se: "?"

E "\\?" , torna-se "\?"

Você pode delimitar seu regexp com barras em vez de aspas e, em seguida, uma única barra invertida para escaping do ponto de interrogação. Tente isto:

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

Sempre que você tiver um padrão conhecido (ou seja, você não usar uma variável para construir um RegExp), use a notação literal regex onde você só precisará usar barras invertidas únicas para escaping de metacaracteres de regex especiais:

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

Sempre que você precisar criar um RegExp dinamicamente, use a notação de construtor RegExp , em que você DEVE dobrar as barras invertidas para que elas denotem uma barra invertida literal :

 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"); 

Uma leitura obrigatória: RegExp: Description at MDN.