Chaque fois que vous avez un connu sous le nom de (c'est-à-dire que vous n'utilisez pas une variable pour construire une RegExp), utilisez la fonction littéral où il suffit d'utiliser la notation regex. simple des antislashes pour échapper aux métacaractères spéciaux des regex :
var re = /I like your Apartment\. Could we schedule a viewing\?/g;
^^ ^^
Chaque fois que vous avez besoin de construire une RegExp de manière dynamique, utilisez RegExp
notation des constructeurs où vous DEVEZ des doubles barres obliques inversées pour indiquer une barre oblique inversée 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");
Et si vous utilisez le String.raw
vous pouvez utiliser \
tel quel (voir un exemple d'utilisation d'un modèle de chaîne littérale où vous pouvez mettre des variables dans le motif regex) :
const questionmark_block = String.raw`\?`; // A literal ?
const initial_subpattern = "I like your Apartment\\. Could we schedule a viewing";
const re = new RegExp(`${initial_subpattern}${questionmark_block}`, 'g'); // Building pattern from two variables
console.log(re); // => /I like your Apartment\. Could we schedule a viewing\?/g
A lire absolument : RegExp : Description à MDN.
0 votes
Le pire dans tout ça, c'est que même l'utilisation d'une chaîne au lieu d'une regex provoque ce problème, par exemple
str.search("?")
Cela ressemble vraiment à un bogue car ce n'est pas une regex et elle ne devrait pas être traitée comme telle.