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

93
Vistas
Tratando de excluir la coincidencia cuando está rodeado en ambos lados por una determinada cadena

Lo que estoy buscando hacer es modificar una expresión regular (sabor JS) para que no coincida si el patrón está precedido y seguido por la misma cadena.

A modo de analogía simple, supongamos que quiero hacer coincidir todas las instancias de n que no están precedidas ni seguidas por e . Entonces, por ejemplo, la expresión regular no debe coincidir con la n en alkene , pero aún debe coincidir con la n en pen o nest , que solo tienen la e directamente adyacente a n en un lado, no en ambos.

La mayoría de los hilos antiguos que he visto tratando de encontrar una respuesta básicamente dicen "simplemente use miradas negativas", pero el problema es que (?<!e)n(?!e) no coincide con ninguna de esas entradas, porque el lookbehind y lookahead son procesados por el motor de expresiones regulares por separado, por lo que considera que cualquier condición es suficiente para excluir la coincidencia.

(La expresión regular real es (?<!¸ª)()(ɣʷ|h₂|r₂|r₃|w|j)(?:e|o|ø|ɑ|i|ɚ|y|u|a)(?!¸ª) y no coincide con la ɣʷ en t͡ʃe:h₁dɣʷo¸ªh₂¸ª , pero eso hace que el problema parezca mucho más difícil de explicar de lo que debería ser)

¿Cómo modifica una expresión regular para excluir solo patrones cuando están anidados?

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

0

El patrón (?<!b)a(?!b) aquí debe reemplazarse con (?<!b(?=ab))a o a(?!(?<=ba)b) . El punto es llamar una búsqueda hacia adelante inversa o una búsqueda hacia atrás desde una búsqueda hacia atrás o una búsqueda hacia adelante.

Vea la corrección de su patrón (sin ninguna optimización) donde tomé la búsqueda anticipada, la pegué dentro de la búsqueda posterior después de ª , invertí la búsqueda anticipada (es decir, la hice positiva) y agregué todo el patrón antes de ¸ª en la búsqueda anticipada para poder llegar a la derecha ¸ª :

 (?<!¸ª(?!(ɣʷ|h₂|r₂|r₃|w|j)(?:e|o|ø|ɑ|i|ɚ|y|u|a)¸ª))()(ɣʷ|h₂|r₂|r₃|w|j)(?:e|o|ø|ɑ|i|ɚ|y|u|a)

O, si pones el lookbehind en lookahead:

 ()(ɣʷ|h₂|r₂|r₃|w|j)(?:e|o|ø|ɑ|i|ɚ|y|u|a)(?!(?<=¸ª(ɣʷ|h₂|r₂|r₃|w|j)(?:e|o|ø|ɑ|i|ɚ|y|u|a))¸ª)

Vea la demostración de expresiones regulares (y la demostración de expresiones regulares #2 ).

Siempre que su patrón sea simple, es mejor no repetir el patrón en las búsquedas, por lo general solo puede usar . o .{x} donde x representa el número de caracteres que puede coincidir con la parte del patrón que consume. Aquí, no está claro con cuántos caracteres puede coincidir el patrón, probablemente puede usar (?<!¸ª(?!.{1,2}¸ª))()(ɣʷ|h₂|r₂|r₃|w|j)(?:e|o|ø|ɑ|i|ɚ|y|u|a) , pero no tengo ningún caso límite para probar.

Mejorar esto aún más puede producir (?<!¸ª(?!.{1,2}¸ª))()(ɣʷ|[hr]₂|r₃|w|j)([eoøɑiɚyua]) ( demostración ).

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