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

88
Vistas
Regex está capturando demasiado de la cadena

Tengo estas tres declaraciones de expresiones regulares y estoy usando Javascript

 /(?<=[AND])\s?\[(.*?)\]/ /(?<=[OR])\s?\[(.*?)\]/ /(?<=[NOT])\s?\[(.*?)\]/

dada una cadena como -> AND [thing1, thing2, thing3] OR [thing4, thing5] NOT [thing6] Espero que las coincidencias de los patrones regresen en orden

 thing1, thing2, thing3 thing4, thing5 thing6

Cuando un usuario ingresa una cadena como esta -> AND [thing1, thing2, thing3 OR [thing4, thing5] el primer patrón regresa

 thing1, thing2, thing3 OR [thing4, thing5

Estoy tratando de averiguar cómo evitar que la expresión regular coincida cuando hay una palabra clave booleana presente antes de un paréntesis de cierre. He intentado perder el tiempo agregando [^NOT]|[^OR] ^NOT|^OR en el grupo de captura, pero nada de lo que he hecho funciona bien (regex newb aquí).

Además, si hay otros errores potencialmente obvios con mi expresión regular actual, indíquelos.

Editar: Perdón a todos por la respuesta lenta, me tomó un poco de tiempo descifrar lo que están haciendo sus expresiones regulares. Gracias por la información sobre los corchetes que capturan grupos, veo lo que estaba haciendo mal de antemano.

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

0

¿Por qué no combinar cada uno de estos patrones en un solo grupo coincidente? Parece que tiene algunos conceptos erróneos fundamentales, específicamente con respecto al uso de corchetes ( [] ) en su patrón.

No está claro por qué eligió incluir sus tokens lógicos en estos corchetes: en RegExp, estos se usan específicamente para denotar juegos de caracteres . La forma en que expresaste esto en tu patrón original coincide literalmente con uno de los dos o tres caracteres del conjunto, y no con la palabra completa (como parece ser tu intención). También parece haber sido víctima del mismo concepto erróneo en su intento de incluir estas fichas lógicas en el último grupo de su patrón.

En su lugar, use alternativas (denotadas por barras verticales | ) correctamente:

 const test1 = `AND [thing1, thing2, thing3] OR [thing4, thing5] NOT [thing6]`; const test2 = `AND [thing1, thing2, thing3 OR [thing4, thing5]`; const pattern = /(?<=AND|OR|NOT)(?:\s?)\[(.*?)(?:\]|\s(AND|OR|NOT))/g; console.log([...test1.matchAll(pattern)].map(match => match[1])); console.log([...test2.matchAll(pattern)].map(match => match[1]));

expresión regular101

Dado que es nuevo en JavaScript, le recomiendo usar una utilidad como regex101 para crear sus patrones; de forma predeterminada, un panel en el lado derecho de la ventana explica, en lenguaje sencillo, lo que realmente hace cada parte de su patrón. , que puede comparar con lo que espera que haga y ajustar en consecuencia.

about 4 years ago · Juan Pablo Isaza Denunciar

0

  • El uso de [AND] significa una clase de carácter y coincide con un solo carácter A N D
  • El uso de [^NOT] significa una clase de carácter negado que coincide con cualquier carácter individual excepto N O T
  • Usar ^NOT|^OR significa hacer coincidir NOT u OR al comienzo de la cadena

Si desea 3 alternativas, puede hacerlo usando una alternancia en un grupo (?:AND|OR|NOT)

Usando Javascript, puede afirmar que entre el corchete de apertura y cierre no hay Y O NO

 (?<=(?:AND|OR|NOT)\s?\[)(?![^\][]*\b(?:AND|OR|NOT)\b)[^\][]*(?=\])
  • (?<=(?:AND|OR|NOT)\s?\[) Positivo mirar atrás, afirmar cualquiera de las alternativas a la izquierda
  • (?![^\][]*\b(?:AND|OR|NOT)\b) Anticipación negativa para afirmar ninguna de las alternativas antes de ninguno de los corchetes
  • [^\][]* Coincidencia de caracteres opcionales que no sean [ y ]
  • (?=\]) Anticipación positiva, afirmar ] a la derecha

Demostración de expresiones regulares

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