Je vous encourage fortement à utiliser la forme fonctionnelle String.replace() pour résoudre votre problème, plutôt que d'essayer de paramétrer l'expression rationnelle dans une boucle for qui se répète sur {0}, {1}, etc. En d'autres termes, plutôt que de rechercher '{0}' ou '{1}', il suffit de rechercher '{([0-9] +)}' (ie {} entourant un nombre arbitraire, et passez une fonction à la fonction replace() pour remplacer intelligemment ces expressions en fonction du nombre entre les {}. Cela vous permet d'utiliser un littéral RegExp que vous pouvez écrire comme/{([0-9] +)}/. plutôt que mess 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)]; }
);
qui donne
the song says zero little one little two little-endians
Voir ceci similar question.
edit: si vous voulez laisser seuls points qui sont supérieures à la longueur de votre liste args
, assurez-vous de bon sens 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;}
);
qui donne
the song says zero little one little two little-endians,
{3} little {4} little {5} little-endians
@casperOne, quel est le doublon? Ni [cette question] (http://stackoverflow.com/questions/4029109/javascript-regex-how-to-put-a-variable-inside-a-regular-expression) ni [cette question] (http: // stackoverflow.com/questions/494035/how-do-you-pass-a-variable-to-a-regular-expression-javascript) étaient les mêmes que cette question. Cette question est importante car elle montre réellement le mélange d'une variable chaîne dans un modèle regex, alors que les réponses des autres questions ne fournissaient que des exemples où les caractères d'échappement n'étaient pas un problème. – MandM