2012-01-04 40 views
5

Estoy tratando de crear una solución de plantillas JavaScript súper simple. Quiero utilizar el método JavaScript replace para encontrar todas las instancias de llaves en una plantilla y reemplazarlas con sus datos apropiados.Buscar y reemplazar con JavaScript

Por ejemplo, si mi plantilla fue: <p>My name is {{name}}. I am {{age}}.</p>

me gustaría el resultado: <p>My name is Olly. I am 19.</p>

Aquí está mi código hasta ahora: http://jsfiddle.net/2RkAG/

estoy tratando de hacer que sustituirá automáticamente cada pieza de datos, por lo que no tengo que decirle explícitamente al JavaScript qué reemplazar. Sin embargo, aquí es donde estoy teniendo problemas.

Respuesta

4

$1 solo funciona si pasa una cadena directamente. No funciona de la forma en que lo tiene, porque person["$1"] se evalúa antes de pasar la cadena a .replace - y person["$1"] es literalmente undefined.

Puede pasar una función en su lugar: http://jsfiddle.net/2RkAG/1/. La función se llama para cada reemplazo y tiene argumentos aprobados que son equivalentes a, p. $1.

$result.html(template.replace(/{{(.*?)}}/g, function(a, b) { 
    return person[b]; // a = complete match, b = first group 
})); 

que no es necesario para escapar de la primera {, tampoco.

+0

Muchas gracias. Eso es perfecto. –

+0

Diga, ¿qué ocurre si quiero usar la plantilla de la siguiente manera: '

Mi nombre es {{person.name}}. Soy {{person.age}}.

'. He conseguido esto trabajando con 'eval', pero ¿es esta la mejor manera de hacer esto? ¿Seguro? De la misma manera: http://jsfiddle.net/2RkAG/20/ –

+1

@Oliver Joseph Ash: Necesitarás algún algoritmo de búsqueda de rutas si no quieres 'eval': http://jsfiddle.net/2RkAG/24 . – pimvdb