Réponse courte:
function escapeRegEx(s) {
return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
}
var expression = new RegExp('\\\\"mediaType\\\\":\\\\"' + escapeRegEx(variable) + '\\\\"');
// or, using a template literal:
var expression = new RegExp(`\\\\"mediaType\\\\":\\\\"${escapeRegEx(variable)}\\\\"`);
Réponse longue:
En plus d'être utilisé pour les caractères meta, backslash dans les expressions régulières peuvent être utilisées pour échapper à des personnages qui auraient autrement un sens (comme *
, $
, parenthèses, et \
). La manière de faire correspondre une barre oblique inverse dans une expression régulière consiste donc à en ajouter une autre en tant que caractère d'échappement: \\
. En prenant cela en compte, l'expression régulière que vous voulez terminer est \\"mediaType\\":\\"img\\"
, et si vous utilisiez un littéral d'expression régulière, ce serait le cas. Malheureusement, il devient un peu plus impliqué parce que vous devez créer une expression de manière dynamique, vous devez fournir l'expression comme une chaîne, qui doit également les barres obliques inversées. Cela ajoute une deuxième couche d'échappement, donc vous devez doubler chacun des caractères \
à nouveau, et vous finissez avec new RegExp('\\\\"mediaType\\\\":\\\\"img\\\\"')
.
Une autre complication est que vous voulez que le contenu de variable
soit mis en correspondance littéralement, pas interprété comme une expression régulière. Malheureusement, il n'existe pas de méthode intégrée permettant d'échapper automatiquement les expressions régulières dans JavaScript. Vous devez donc utiliser l'une des solutions dans Is there a RegExp.escape function in Javascript?. J'ai utilisé une version légèrement modifiée de la réponse acceptée qui la définit comme une fonction autonome au lieu de l'ajouter à l'objet RegExp
. La solution exacte n'a pas d'importance, tant que vous échappez à la partie dynamique.
Utilisez: 'new Regex ('\\\\" mediaType \\\\ ": \\\\" img \\\\ "')' – anubhava
'\' est un caractère d'échappement dans les deux chaînes javascript et régulière expression. Vous devez échapper à votre évasion. Aussi, vous n'avez pas besoin d'échapper '' 'dans regex (si c'est ce que vous essayez de faire – ctwheels
@ctwheels J'ai besoin de' '' car il fait partie de la chaîne que je recherche –