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

150
Vistas
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 Respuestas
Responde la pregunta

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