Javascript insertar variables en un lugar específico en una cadena

¿Cuál es el mejor método para tomar una cadena de “plantilla” e insertar información en ella?

Por ejemplo:

var templateString = "Hello {name1}, my name is {name2}"; var name1 = "Phil"; var name2 = "Amy"; 

¿Habría un nombre fácil para insertar los valores donde está el nombre de la variable entre llaves? Necesito que esto funcione no solo para este ejemplo (así que hacerlo por un índice fijo no es una opción) sino para cualquier cadena de plantilla dada y cualquier número de variables.

Puede utilizar literales de plantilla ES2015. Pero, las variables deben definirse antes de usarlas.

 var name1 = "Phil"; var name2 = "Amy"; var templateString = `Hello ${name1}, my name is ${name2}`; console.log(templateString); document.body.innerHTML = templateString; 

puede utilizar la función javascript reemplazar: http://www.w3schools.com/jsref/jsref_replace.asp

entonces tu código sería:

 var templateString = "Hello {name1}, my name is {name2}"; var name1 = "Phil"; var name2 = "Amy"; templateString = templateString.replace('{name1}', name1); templateString = templateString.replace('{name2}', name2); 

por favor, hágamelo saber si esto no funciona.

ES6 tiene interpolación de cadenas, puedes hacerlo así

 var name1 = "Phil"; var name2 = "Amy"; var templateString = `Hello ${name1}, my name is ${name2}`; document.write(templateString); 

En ES5, podrías usar String.replace:

 var templateString = "Hello {name1}, my name is {name2}"; var name1 = "Phil"; var name2 = "Amy"; templateString.replace(/\{([^}]*)\}/g, function (m, v) { return eval(v) || m; }) 

Tenga en cuenta que no se recomienda el uso de eval. Si establece los nombres en un objeto, puede hacer esto:

 var templateString = "Hello {name1}, my name is {name2}"; var names = {}; names.name1 = "Phil"; names.name2 = "Amy"; templateString.replace(/\{([^}]*)\}/g, function (m, v) { return names[v] || m; })