Ir al contenido principal

Regular Expression - Expresiones regulares

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".

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

Entradas populares de este blog

Probando ChatGPT - Mapa conceptual con Mermaid

 Había conversado con ChatGPT acerca de cuidado de las plantas e hidroponía. Luego de unos días me di cuenta que quizás también podría saber acerca de crear Mapas conceptuales. Salió lo siguiente; le falta un concepto para crear correctamente mapas conceptuales (la relación entre los conceptos), pero podría ser algo para ayudarnos a corregir mejor. El texto original era el que cito a continuación, pero le agregué explícitamente que me armara un "mapa conceptual" utilizando el lenguaje Mermaid, un lenguaje descriptivo que permite construir gráficos diversos, entre ellos Mapas conceptuales, generando un archivo SVG. ``` Hacé un mapa conceptual en lenguaje Mermaid con el siguiente texto, redactado anteriormente: "La hidroponía es un método de cultivo que se utiliza para cultivar plantas sin suelo utilizando una solución nutriente y agua. Algunas plantas pueden cultivarse con éxito mediante hidroponía, mientras que otras necesitan el suelo para crecer y prosperar. De las pl...

Conectar a Servidor Node.JS desde VB6 o VBA

El presente código sirve tanto para Visual Basic 6.0 (sí, todavía sirve, todavía sirve!) como para Visual Basic para Aplicaciones (Excel o VBA). ' Si estamos en Visual Basic para Aplicaciones agregar la referencia ' WinHTTP, en el menú Herramientas, Referencias, Microsoft WinHTTP Services Function Solicitar( _ ByVal URLBase As String _ , Optional ByVal Puerto As Integer = 80 _ , Optional ByVal Seccion As String = "" _ , Optional ByVal Metodo As String = "GET" _ ) As String On Error GoTo solucion #If VBA6 Then Dim objXML As New WinHttpRequest #ElseIf Win32 Then Dim objXML As Object Set objXML = CreateObject("MSXML2.ServerXMLHTTP") #End If objXML.Open Metodo, URLBase & ":" & Puerto & "/" & Seccion, False objXML.send If (objXML.Status = 404) Then Solicitar = "404 Error" Else Solicitar = objXML.responseText End If Se...