Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

243
Vistas
Regex: ¿cómo hacer coincidir una sintaxis particular cuando no incluye esa sintaxis particular, una sola línea?

Tengo una sintaxis particular que uso en cadenas que me ayuda a recuperar e insertar subcadenas. un ejemplo:

 {{ variable ||| <div>example text</div>}}

Ahora me encuentro teniendo algo como:

 {{ variable1 ||| <div>some text</div> <ul> {{ variable2 |||<li>some other text<li/>}} {{ variable3 |||<li>even more text<li/>}} </ul> }}

y obviamente la expresión regular que uso para el primer caso no coincide correctamente.

la expresión regular que suelo usar es:

 /\B\{\{(.*?)\|\|\|(.*?)\}\}/

que en el segundo ejemplo coincide con:

 {{ variable1 ||| <div>some text</div> <ul> {{ variable2 |||<li>some other text<li/>}}

que no es lo que quiero.

Necesito una expresión regular para que coincida con esa sintaxis en particular cuando no contiene esa sintaxis en particular. He probado muchas combinaciones similares a esta:

 \B\{\{(.*?)\|\|\|(.*(?!\{\{.*?\|\|\|.*?\}\}).*)\}\}

pero no puedo resolverlo. Sería suficiente para obtener sólo

 {{ variable2 |||<li>some other text<li/>}}

Porque después de la coincidencia puedo eliminar esa sintaxis para que al verificar recursivamente pueda hacer coincidir todo.

La dificultad que tengo es que la cadena que analizo está solo en una línea, por lo que no puedo usar nada como

 ^(?!example).*$

¿Tengo razón? ¿Qué me estoy perdiendo? No pude encontrar una solución en otras preguntas, así que escribí esto; lo siento si esto es un duplicado.

Muchísimas gracias

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

El problema que tiene aquí es que está comenzando a superar lo que puede lograr de manera útil * con una expresión regular: tal como van las cosas ahora, parece que tarde o temprano llegará a algo como:

 {{ variable1 ||| <div>some text</div> <ul> {{ variable2 |||<li>some other text<li/>}} {{ variable3 |||<li>even more text <ul> <li>text always here</li> {{ variable4 ||| <li>optional text</li>}} </ul> <li/>}} </ul> }}

En este tipo de situación, ha pasado el punto en el que tiene una sustitución de texto conveniente y está creando su propio lenguaje de marcado y sistema de plantillas. Una vez que sepa que es lo que está haciendo, no es demasiado difícil, pero definitivamente es una tarea más pesada: querrá analizar su texto en un árbol (regexes puede ser muy útil para esto) y luego usar sus variables para decidir qué nodos mostrar.

Lo que debe pensar si llega a este punto es si es mejor usar su propio marcado para esto, o si existe una herramienta que ya puede manejar lo que necesita con cambios mínimos en sus documentos existentes. Hay varios motores de plantillas disponibles en JavaScript (creo que Moustache y Handlebars son los más conocidos, pero vale la pena echarle un vistazo a herramientas como JSRender ) y es muy posible que algo ya se ajuste a sus necesidades.


* Cuando digo útil , lo que quiero decir es que más allá de cierto punto, si puede resolver un problema con Regex, tiende a volverse engorroso y difícil de mantener. Las expresiones regulares son excelentes herramientas para operaciones de texto simples, pero si se vuelven demasiado grandes o complicadas, puede ser muy difícil solucionarlas.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda