Original
var datosTrabajo = { ... } ;
var textoActualizado = textoPlantilla.replace
(
/{{(.*?)}}/gi
,
function( elAnterior, elReemplazando ) {
return datosTrabajo[ elReemplazando ]
}
)
;
function plantillaPara( dadaPlantilla, dadosDatos ) {
return dadaPlantilla.replace(
/{{(.*?)}}/gi
,
function( a, b ) { return dadosDatos[b] }
) ;
}
var fichaCarlos = { nombre: "Carlos", edad: 32, profesion: "Docente" } ;
var template = "El usuario {{nombre}} tiene {{edad}} años y es
{{profesion}}." ;
alert( plantillaPara( template, fichaCarlos ) ) ;
Caso
Tengo una frase... "Esta es una \nsimple oración."
Deseo obtener el texto entre "Esta es " y " oración".
Solución encontrada en StackOverflow preguntado por Dave Jarvis
Por ejemplo:
(?<=Esta es)(.*)(?=oración)
Usé el "mirar atrás"
(?<=)
y el "mirar adelante" (?=)
para que ese "Esta es" y "oración" no sea incluido en el encuentro/match, aunque para el total se puede más fácil escribir Esta es(.*)oración
.
La cosa importante aquí es que activas el modo "punto todos" (dotall) de tu motor de Expresiones Regulares. Así que el punto también toma al nuevo renglón (\n). Pero el cómo lo hagas depende del motor de RegEx.
Lo siguiente a considerar es si usás el
.*
o el .*?
. El primero es ¿codicioso? y enganchará letras hasta la última expresión "oración" en tu frase. El siguiente es perezoso, solamente coincidirá caracteres hasta el primer "oración".
Update
Esta es(?s)(.*)oración
Donde el (?s) cambia el modificador dotall, haciendo que el
.
coincida con los caracteres de nuevo renglón (\n). ¿?
Update 2:
(?<=es \()(.*?)(?=\s*\))
coincide con tu ejemplo "Esta es (una simple) oración". Miralo en Regexr
En PHP...
function procesar( $texto, $datos ) { $repl = preg_replace_callback( '/{([^}]+)}/' , function ($m) use ($datos) { return $datos[$m[1]]; }, $texto ) ; return $repl ; }
Comentarios
Publicar un comentario