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

87
Views
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 answers
Answer question

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 Report

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 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!