C'est une question simple, je pense.
J'essaie 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 ?
personnage ... J'ai essayé de m'échapper \
, mais cela ne fonctionne pas non plus. Existe-t-il une autre façon d'utiliser ?
littéralement au lieu de comme caractère spécial?
javascript
regex
literals
Andrew
la source
la source
str.search("?")
cela semble définitivement être un bogue car ce n'est pas une expression régulière et ne devrait pas être traité comme tel. 🤦Réponses:
Vous devez y échapper avec deux contre-obliques
Voir ceci pour plus de détails:
http://www.trans4mind.com/personal_development/JavaScript/Regular%20Expressions%20Simple%20Usage.htm
la source
Vous devez utiliser une double barre oblique:
var regex = new RegExp("\\?", "g");
Pourquoi? car en JavaScript, il
\
est également utilisé pour échapper des caractères dans les chaînes, donc: "\?" devient:"?"
Et
"\\?"
devient"\?"
la source
Vous pouvez délimiter votre expression rationnelle avec des barres obliques au lieu de guillemets, puis une seule barre oblique inverse pour échapper au point d'interrogation. Essaye ça:
var gent = /I like your Apartment. Could we schedule a viewing\?/g;
la source
Chaque fois que vous avez un modèle connu (c'est-à-dire que vous n'utilisez pas de variable pour construire un RegExp), utilisez la notation littérale de regex où vous n'avez besoin d'utiliser que des barres obliques inverses simples pour échapper aux métacaractères spéciaux de 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 la
RegExp
notation constructeur où vous DEVEZ doubler les contre-obliques pour qu'elles désignent une contre - oblique 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
littéral de chaîne, vous pouvez l'utiliser\
tel quel (voir un exemple d'utilisation d'un littéral de chaîne de modèle où vous pouvez placer des variables dans le modèle 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 chez MDN.
la source