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

99
Vistas
Patrón Regex para múltiples grupos de captura opcionales

Me gustaría extraer algunos datos del texto que tiene los siguientes patrones.

 text1 text1|text2 text1|text2[text3] text1|text2[text3] text4 (text1|text2[text3], text4) text1[text3] text1[text3], text4

Hasta ahora logré construir dos expresiones y cuando la primera falla, recurre a la segunda.

/\(?([^|[]*)\|?([^[]*)\[?(.*)\],?\s?([^)]*)\)?/

/([^|]*)\|?(.*)/

Quizás haya una mejor manera de analizarlo.

¿Es posible capturar todo lo anterior con una expresión regular?

Gracias por la ayuda

Ejemplo

 const items = [ "text1", "text1|text2", "text1|text2[text3]", "text1|text2[text3] text4", "(text1|text2[text3], text4)", "text1[text3]", "text1[text3], text4" ] const parse = (text) => { const [_, text1, text2, text3, text4] = /\(?([^|[]*)\|?([^[]*)\[?(.*)\],?\s?([^)]*)\)?/.exec(text) || /([^|]*)\|?(.*)/.exec(text) return { text1, text2, text3, text4 }; } for(const text of items) { console.log(parse(text)); }

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

0

Puedes usar

 const items = [ "text1", "text1|text2", "text1|text2[text3]", "text1|text2[text3] text4", "(text1|text2[text3], text4)", "text1[text3]", "text1[text3], text4" ] const parse = (text) => { const [_, text1, text2, text3, text4] = /^\(?([^[|]+)(?:\|([^[]+))?(?:\[([^\][]*)](?:\s*(?:,\s*)?([^\s)].*?))?)?\)?$/.exec(text) return { text1, text2, text3, text4 }; } for(const text of items) { console.log(text, parse(text)); }

Vea la demostración de expresiones regulares . Detalles :

  • ^ - comienzo de la cadena
  • \(? - un opcional )
  • ([^[|]+) - Grupo 1: uno o más caracteres que no sean [ y |
  • (?:\|([^[]+))? - una secuencia opcional de | y luego Grupo 2: uno o más caracteres que no sean [ tantos como sea posible
  • (?:\[([^\][]*)](?:\s*(?:,\s*)?([^\s)].*?))?)? - una secuencia opcional de
    • \[([^\][]*)] - [ , cero o más caracteres que no sean [ y ] (capturados en el Grupo 3) y luego un ]
    • (?:\s*(?:,\s*)?([^\s)].*?))? - una secuencia opcional de
      • \s* - cero o más caracteres de espacio en blanco
      • (?:,\s*)? - una secuencia opcional , y cero o más caracteres de espacio en blanco
      • ([^\s)].*?) - Grupo 4: un carácter que no sea un espacio en blanco y ) y luego cero o más caracteres que no sean caracteres de salto de línea, la menor cantidad posible
  • \)? - un opcional )
  • $ - final de la cadena.
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