web-dev-qa-db-fra.com

échapper au point d'interrogation dans regex javascript

C'est une question simple, je pense.

J'essaie de rechercher l'occurrence d'une chaîne dans une autre chaîne en utilisant l'expression régulière en JavaScript comme ceci:

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

Cela ne fonctionne pas à cause du ? caractère .... J'ai essayé de lui échapper avec \, mais cela ne fonctionne pas non plus. Existe-t-il une autre façon d'utiliser ? littéralement au lieu d'un caractère spécial?

75
Andrew

Vous devez y échapper avec deux barres obliques inverses

\\?

Voir ceci pour plus de détails:

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

125
Jon

Vous devez utiliser une double barre oblique:

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

Pourquoi? car en JavaScript, le \ est également utilisé pour échapper les caractères dans les chaînes, donc: "\?" devient: "?"

Et "\\?", devient "\?"

18
CMS

Vous pouvez délimiter votre expression rationnelle avec des barres obliques au lieu de guillemets, puis une barre oblique inverse simple pour échapper au point d'interrogation. Essaye ça:

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

Chaque fois que vous avez un motif connu (c'est-à-dire que vous n'utilisez pas de variable pour construire un RegExp), utilisez littéral notation regex où il vous suffit d'utiliser une seule barre oblique inverse pour échapper aux métacaractères spéciaux regex:

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

Chaque fois que vous avez besoin de construire un RegExp dynamiquement, utilisez RegExp la notation constructeur où vous DEVEZ les contre-obliques doubles pour qu'ils dénotent une barre oblique inverse littérale :

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

A lire absolument: RegExp: Description sur MDN.

4
Wiktor Stribiżew