échapper à un point d'interrogation en javascript regex
-
23-08-2019 - |
Question
Ceci est une simple question, je pense.
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 en raison du caractère ?
.... J'ai essayé échapper avec \
, mais cela ne fonctionne pas non plus. Y at-il une autre façon d'utiliser ?
littéralement au lieu d'un caractère spécial?
La solution
Vous devez échapper avec deux barres obliques
\\?
Voir ce pour plus de détails:
Autres conseils
Vous devez utiliser une double barre oblique:
var regex = new RegExp("\\?", "g");
Pourquoi? car en JavaScript du \
est également utilisé pour échapper les caractères dans les chaînes, alors: « \? » devient: "?"
Et "\\?"
, devient "\?"
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;
Chaque fois que vous avez un connu motif (c.-à-vous de ne pas utiliser une variable pour construire une expression régulière), utilisez littéral notation 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 notation constructeur RegExp
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 au MDN.