Le recomiendo encarecidamente que utilice la forma funcional de String.replace() para resolver su problema, en lugar de intentar parametrizar la expresión regular en un for-loop que itera sobre {0}, {1}, etc.
En otras palabras, en lugar de buscar '{0}' o '{1}', simplemente busque '{([0-9] +)}' (es decir {} rodeando un número arbitrario, y pasa una función a la función replace() para reemplazar inteligentemente estas expresiones en función del número entre {} 's. Esto le permite usar un literal RegExp que puede escribir como/{([0-9] +)}/. en lugar de perder el tiempo con caracteres de escape en cadenas
Algo como esto:
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)]; }
);
que produce
the song says zero little one little two little-endians
Consulte este similar question.
edición: si desea dejar objetos por sí solos que son mayores que la longitud de su lista args
, asegúrese de cordura a comprobar el número de parámetro:
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;}
);
que produce
the song says zero little one little two little-endians,
{3} little {4} little {5} little-endians
@casperOne, ¿cuál es el duplicado? Ni [esta pregunta] (http://stackoverflow.com/questions/4029109/javascript-regex-how-to-put-a-variable-inside-a-regular-expression) ni [esta pregunta] (http: // stackoverflow.com/questions/494035/how-do-you-pass-a-variable-to-a-regular-expression-javascript) fueron los mismos que esta pregunta. Esta pregunta es importante porque muestra realmente la mezcla de una variable de cadena en un patrón de expresión regular, mientras que las respuestas de las otras preguntas solo proporcionaron ejemplos donde el escape de los caracteres no era un problema. – MandM