Los requisitos de la pregunta original claramente no podrían beneficiarse de la interpolación de cadenas, ya que parece que es un procesamiento en tiempo de ejecución de claves de reemplazo arbitrarias.
Sin embargo , si solo tuviera que hacer una interpolación de cadenas, puede usar:
const str = `My name is ${replacements.name} and my age is ${replacements.age}.`
Tenga en cuenta las comillas inversas que delimitan la cadena, son obligatorias.
Para obtener una respuesta que se adapte a los requisitos del OP en particular, puede usar String.prototype.replace()
para los reemplazos.
El siguiente código manejará todas las coincidencias y no las tocará sin un reemplazo (siempre que sus valores de reemplazo sean todas cadenas, si no, vea a continuación).
var replacements = {"%NAME%":"Mike","%AGE%":"26","%EVENT%":"20"},
str = 'My Name is %NAME% and my age is %AGE%.';
str = str.replace(/%\w+%/g, function(all) {
return replacements[all] || all;
});
jsFiddle .
Si algunos de sus reemplazos no son cadenas, asegúrese de que existan primero en el objeto. Si tiene un formato como el del ejemplo, es decir, envuelto en signos de porcentaje, puede usar el in
operador para lograrlo.
jsFiddle .
Sin embargo, si su formato no tiene un formato especial, es decir, ninguna cadena, y su objeto de reemplazo no tiene un null
prototipo, utilice Object.prototype.hasOwnProperty()
, a menos que pueda garantizar que ninguna de sus posibles subcadenas reemplazadas chocará con los nombres de propiedad en el prototipo.
jsFiddle .
De lo contrario, si su cadena de reemplazo fuera 'hasOwnProperty'
, obtendría una cadena desordenada resultante.
jsFiddle .
Como nota al margen, debería llamarse replacements
un Object
, no un Array
.