Tengo una cadena de plantilla que quiero cambiar palabras con {{}} a su alrededor a datos de un nombre similar de un archivo json. Estoy usando el script de aplicaciones de Google para esto.
Ex. Hola, mi nombre es {{Nombre}} {{Apellido}}. --> Hola mi nombre es Sherlock Holmes.
El archivo Json sería:
[ { 'First Name': 'Sherlock', 'Last Name': 'Holmes' } ]He intentado usar este código donde la plantilla es la cadena y los datos son el json:
function fillInTemplateFromObject(template, data) { let template_string = template; // Token replacement template_string = template_string.replace(/{{[^{}]+}}/g, key => { return escapeData_(data[key.replace(/[{}]+/g, "")] || ""); }); return JSON.parse(template_string); } function escapeData_(str) { return str .replace(/[\\]/g, '\\\\') .replace(/[\"]/g, '\\\"') .replace(/[\/]/g, '\\/') .replace(/[\b]/g, '\\b') .replace(/[\f]/g, '\\f') .replace(/[\n]/g, '\\n') .replace(/[\r]/g, '\\r') .replace(/[\t]/g, '\\t'); };Pero simplemente elimina los frenos en lugar de reemplazarlos. ex. Hola, mi nombre es .
Cualquier ayuda sería apreciada.
Dado que su variable data es un diccionario dentro de una matriz, hacer referencia a data[key.replace(/[{}]+/g, "")] devuelve undefined . Esto se puede remediar ingresando lo siguiente para su variable de data .
{ 'First Name': 'Sherlock', 'Last Name': 'Holmes' } Además, no es necesario analizar template_string .
function fillInTemplateFromObject(template, data) { let template_string = template; // Token replacement template_string = template_string.replace(/{{[^{}]+}}/g, key => { return escapeData_(data[key.replace(/[{}]+/g, "")] || ""); }); return template_string; } function escapeData_(str) { return str .replace(/[\\]/g, '\\\\') .replace(/[\"]/g, '\\\"') .replace(/[\/]/g, '\\/') .replace(/[\b]/g, '\\b') .replace(/[\f]/g, '\\f') .replace(/[\n]/g, '\\n') .replace(/[\r]/g, '\\r') .replace(/[\t]/g, '\\t'); };