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

149
Views
Regex para extraer términos de búsqueda no funciona como se esperaba

Tengo la cadena de prueba ti: harry Potter O kw: magia Y sprint: título O ti: HARRY

y quiero la salida como

 ["ti: harry Potter OR kw:", "kw: magic AND sprint:", "sprint: title OR ti:", "ti: HARRY"]

pero la salida que obtengo es

 ["ti: harry Potter OR kw:", "kw: magic AND sprint:", "nt: title OR ti:", "ti: HARRY"]

Está tomando solo 2 caracteres antes de los dos puntos. La expresión regular que estoy usando es

 const match = /[a-z0-9]{2}:.*?($|[a-z0-9]{2}:)/g;

y lo extraigo y lo coloco en una matriz

Intenté reemplazarlo con /[a-z0-9]+:.*?($|[a-z0-9]+:)/g; pero cuando aumento el índice y agrego las cadenas para analizar, lo hace de manera extraña (esto también está incluido en el código)

Intenté cambiar el {2} a n y eso tampoco funciona como se esperaba.

 const parsed = []; const match = /[a-z0-9]{2}:.*?($|[a-z0-9]{2}:)/g; const message = "ti: harry Potter OR kw: magic AND sprint: title OR ti: HARRY"; let next = match.exec(message); while (next) { parsed.push(next[0]); match.lastIndex = next.index + 1; next = match.exec(message); console.log("next again", next); } console.log("parsed", parsed);

https://codesandbox.io/s/regex-forked-6op514?file=/src/index.js

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

0

Para las coincidencias deseadas, puede usar un patrón en el que, opcionalmente, también haría coincidir AND u OR y obtendría la coincidencia en el grupo de captura 1, que se indica como m[1] en el código de ejemplo.

 \b(?=([a-z0-9]+:.*?(?: (?:AND|OR) [a-z0-9]+:|$)))

En partes, el patrón coincide:

  • \b Un límite de palabra para evitar una coincidencia parcial
  • (?= Anticipación positiva para afirmar que lo que está a la derecha es
    • ( Grupo de captura 1
      • [a-z0-9]+:
      • .*? Haga coincidir cualquier carácter excepto una nueva línea lo menos posible
      • (?: grupo de no captura
        • (?:AND|OR) [a-z0-9]+: coincide con AND u OR seguido de un espacio y 1+ veces un carácter a-z0-9 y :
        • | O
        • $ Afirmar el final de la cadena
      • ) Cerrar grupo de no captura
    • ) Cerrar grupo 1
  • ) Cerrar la búsqueda anticipada

Vea una demostración de expresiones regulares .

 const regex = /\b(?=([a-z0-9]+:.*?(?: (?:AND|OR) [a-z0-9]+:|$)))/gm; const str = `ti: harry Potter OR kw: magic AND sprint: title OR ti: HARRY`; const result = Array.from(str.matchAll(regex), m => m[1]); console.log(result);

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!