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

102
Vistas
Divergencia con anticipación RegExp

Estoy haciendo una prueba donde se rechazan todos los enlaces que no tienen 'investing' y 'news', pero no entiendo la lógica de ?= y ?!, y creo que estoy haciendo algo mal ya que el lo contrario de la lógica a continuación no coincide. ¿Alguien podría darme una luz?

Nota: ¡Podría usar ! , pero me gustaría entender cuál es el error de esta expresión.

 const positiveTest = x => (/(?=.*investing)(?=.*news)/).test(x); const negativeTest = x => (/(?!.*investing)(?!.*news)/).test(x); //if 'investing' and 'news' are found console.log('positiveTest:') console.log(positiveTest('https://br.investing.com/news/')); console.log(positiveTest('https://br.investing.com/nws/')); console.log(positiveTest('https://br.inveting.com/news/')); //if 'investing' and 'news' are not found console.log('negativeTest:') console.log(negativeTest('https://br.investing.com/news/')); console.log(negativeTest('https://br.investing.com/nws/')); console.log(negativeTest('https://br.inveting.com/news/'));

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

0

Probar si una cadena coincide con una expresión regular probará si alguna posición individual en la cadena coincide con la expresión regular. Por ejemplo

 /x/

partidos

 'fooxbar'

comenzando en el índice 3 de la cadena.

Su

 /(?!.*investing)(?!.*news)/

coincidirá con todas las cadenas, es decir, en la primera posición después de la cual no existen investing ni news . Si ambas subcadenas no están en la cadena de destino, estará al comienzo de la cadena. De lo contrario, si ambas subcadenas, esta será la posición justo después de donde comienza la última de ellas. Por ejemplo, contra:

 https://br.investing.com/news/

coincidirá en esta posición:

 https://br.investing.com/news/ ^

porque a partir de la e de news , es cierto que ni la investing ni news existen.

Si desea solucionarlo, puede solicitar que la coincidencia comience al principio de la cadena, de modo que las búsquedas anticipadas abarquen toda la longitud de la cadena.

 const negativeTest = x => (/^(?!.*investing)(?!.*news)/).test(x); // ^ use the ^ anchor //if 'investing' and 'news' are not found console.log('negativeTest:') console.log(negativeTest('https://br.investing.com/news/')); console.log(negativeTest('https://br.investing.com/nws/')); console.log(negativeTest('https://br.inveting.com/news/')); console.log(negativeTest('foobar'));

Si desea que el patrón verifique que ambos no existen, pero uno u otro está bien, entonces deberá alternar: hacer coincidir (negativamente) la primera frase seguida de la segunda, o la segunda seguida de la primera.

 const negativeTest = x => (/^(?!.*investing.*news|.*news.*investing)/).test(x); console.log('negativeTest:') console.log(negativeTest('https://br.investing.com/news/')); console.log(negativeTest('https://br.investing.com/nws/')); console.log(negativeTest('https://br.inveting.com/news/')); console.log(negativeTest('foobar'));

about 4 years ago · Juan Pablo Isaza Denunciar

0

hace un tiempo entendí que la razón de esta expresión es incorrecta,

Lookahead/Lookbehind necesita una referencia para buscar, y si no coloca (o no tiene) una referencia, probará cada índice de la cadena como .(?=) / .(?!) . Siendo así, la expresión límite ^ y .* es necesaria al principio para evitar que la búsqueda anticipada pruebe cada índice de la cadena.

una forma más eficiente de escribir esta búsqueda anticipada positiva generalizada es (?=investing|news) , pero la búsqueda anticipada negativa generalizada no es viable porque requiere más expresiones (Ej: ^(?=.*(?:investing|news)) ) es más viable y eficiente invertir una anticipación positiva con NOT ! operador.

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