Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

153
Views
Haga coincidir [etiqueta] y {{etiqueta}} usando un grupo alternativo y búsqueda anticipada

Soy consciente de que esto puede coincidir fácilmente con /(\[tag\]|{{tag}})/ pero eso no es lo que estoy buscando. Este es el comienzo de una expresión regular más larga que estoy tratando de escribir (análisis de atributos, etc.)

Mi criterio es:

  1. Tiene que ser una expresión regular de Javascript (sin PCRE).
  2. La parte entre los envoltorios solo se puede definir una vez.

Tengo la siguiente expresión regular funcionando, pero no me siento cómodo con la expresión regular que no funciona exactamente como la lees:

A los efectos de la legibilidad, voy a pretender que Javascript tiene el indicador "X" aquí. Sé que no.

 (?:(\[)|{{) // Group with alternatives but only capturing group 1 so we can look around (tag) // Capture the part between the wrappers (?: // I don't care about capturing the closing wrapper, just match it (?=\1)}} // Closing condition A (works, but why?) | // OR (?!\1)] // Closing condition B (works, but why?) )

Como puedes ver, funciona aquí:

 let input = ` [tag][ <-- [tag[ [tag}} {{tag] {{tag}} <-- tag}} {{tag [tag tag] `; input = input.replace(/(?:(\[)|{{)(tag)((?=\1)}}|(?!\1)])/g, "@@@@@"); console.log(input);

Si trato de analizar a ojo la expresión regular, ¿no debería ser que la condición de cierre A debe coincidir con ] cuando \k<s> es verdadero?

Sin embargo, si hago eso, termino haciendo coincidir las cosas incorrectas y solo funciona la configuración anterior.

¿Algún gurú de expresiones regulares quiere iluminarme?

Gracias voldomazta

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

La primera coincidencia usará la condición de cierre B porque el siguiente carácter es ] , que no es \1 .

La segunda coincidencia utilizará la condición de cierre A porque el grupo 1 no está undefined , lo que satisfará la previsión.

Dado que javascript regex no admite condicionales (como lo hace C #), elegiría el patrón que tiene en la primera línea. Sin embargo, para tener solo la parte de la tag una vez, escribiría la parte de la expresión regular de la tag en una variable, luego usaría el constructor que toma una cadena, ahora es fácil agregar la misma cadena dos veces y solo tiene una expresión regular para mantener.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!