Double Possible:
Échapper à la chaîne pour utiliser les regex en JavascriptJ'ai un msg comme ceci:
Max {0} caractères autorisés dans {1}
Et j'ai une fonction pour créer un message en utilisant les arguments passés en tant que
for(var i = 0; i < agrs.length; i++){ reg = new RegExp('\{'+i+'\}', 'gi'); key = key.replace(reg,agrs[i]) }
Le problème est qu'il n'est pas en mesure de prendre le param
i
pour créer le reg exp.Ce qui est le chemin pour y parvenir?
Réponses
Trop de publicités?Votre expression rationnelle est / {0} / gi puisque vous la créez à partir d'une chaîne. Et ce n'est pas une expression valide. Vous devez échapper à {dans l'expression rationnelle, car cette syntaxe a une signification particulière dans la syntaxe de l'expression rationnelle.
new RegExp('\\{'+i+'\\}', 'gi');
qui est / \ {0 \} / gi. Vous devez échapper le caractère d'échappement \ dans la chaîne.
Je vous encourage fortement à utiliser la forme fonctionnelle de la Chaîne.replace() pour résoudre votre problème, plutôt que d'essayer de paramétrer les regexp dans une boucle qui itère sur {0},{1},etc.
En d'autres termes, plutôt que de rechercher pour "{0} " ou " {1}', il suffit de regarder pour '{([0-9]+)}' (c'est à dire {} s'entourant un nombre arbitraire, et de passer d'une fonction à la fonction de remplacement() intelligemment remplacer ces expressions basées sur le nombre entre les {} s'. Cela vous permet d'utiliser une RegExp littéral que vous pouvez écrire en tant que /{([0-9]+)}/ plutôt que de perdre son temps avec des caractères d'échappement dans les chaînes.
Quelque chose comme ceci:
s='the song says {0} little {1} little {2} little-endians';
args=['zero','one','two'];
new_string = s.replace(/{([0-9]+)}/g, function(wholematch,firstmatch)
{return args[(+firstmatch)]; }
);
ce qui donne
the song says zero little one little two little-endians
Voir cette question semblable.
edit: si vous voulez laisser seuls éléments qui sont supérieures à la longueur de votre args
la liste, assurez-vous de la santé mentale-vérifier le numéro de paramètre:
s='the song says {0} little {1} little {2} little-endians,\n'+
' {3} little {4} little {5} little-endians';
args=['zero','one','two'];
new_string = s.replace(/{([0-9]+)}/g, function(wholematch,firstmatch)
{var i = +firstmatch; return i < args.length ? args[i] : wholematch;}
);
ce qui donne
the song says zero little one little two little-endians,
{3} little {4} little {5} little-endians
function escapeRegExp(str) {
return str.replace(/[-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}
var re = new RegExp(escapeRegExp(str));
Voir: Chaîne d'échappement à utiliser dans une expression rationnelle Javascript