2009-05-20 8 views
60

C'est une question simple je pense.point d'interrogation d'échappement dans regex javascript

Je suis en train de rechercher l'occurrence d'une chaîne dans une autre chaîne en utilisant regex 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é échapper avec \, mais cela ne fonctionne pas non plus. Existe-t-il une autre façon d'utiliser littéralement ? plutôt que comme caractère spécial?

Répondre

16

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 "\?"

+0

a du sens ... merci – Andrew

15

Vous pouvez délimiter votre regexp avec des barres obliques au lieu de guillemets, puis une seule barre oblique inverse pour échapper à la question de marque. Essayez ceci:

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

Chaque fois que vous avez un connu modèle (c.-à ne pas utiliser une variable pour construire une expression régulière), utilisez notation littérale regex où vous avez besoin d'utiliser unique antislashs pour échapper métacaractères: regex spéciales

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

Chaque fois que vous devez construire un RegExp dynamiquement, utilisez RegExp notation constructeur où vous devez backslashes double pour eux pour désigner un anti-slash:

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 doit lire: RegExp: Description à MDN.