expresión regular no coincide parcialmente con una cadena


0

He visto que ya había alguien haciendo esta pregunta, pero la respuesta no funcionó en mi caso. Tengo una exp exp estructurada como la siguiente:

/regexp/(?i:mktg)

para evitar condiciones de caso de carácter. Necesitaré crear esta expresión que contenga "mktg" pero que no contenga las palabras "round" Y "SMP" en cualquier caso de carácter. ¿Alguien dispuesto a ayudar? Ya lo he intentado /regexp/([^?i:SMP]) y /regexp/^((?!SMP).)*$, pero esos aún tirarán de esta cuerda.

Gracias,

Valeria



1
¿Qué loca herramienta o entorno te hace poner? /regexp/ delante de tu regex?
— tripleee

Respuestas:


0

AFAIK esto debería hacer el trabajo:

^(?i)(?=.*mktg)((?!round|smp).)*$

Explicación:

^           : beginning of line
(?i)        : case insensitive
(?=         : start lookahead, zero-length assertion, make sure we have
  .*        : 0 or more any character
  mktg      : literally "mktg"
)           : end lookahead
(           : start group
  (?!       : start negative lookahead, zero-length assertion, make we DON'T have:
    round   : literally "round"
    |       : OR
    smp     : literally "smp"
  )         : end lookahead
  .         : any character
)*          : group must be repeated 0 or more times
$           : end of line

Casos de prueba:

Match: mktg
Match: abc mktg xyz
No match: round mktg 
No match: SmP mktg 
No match: SPM ROUND 

(?i)^(?!.*(round|smp)).*?mktg podría ser más eficiente
— tripleee

@tripleee: Puede ser, no he hecho un punto de referencia.
— Toto

Estoy siendo modesto evita el retroceso en comparación con el tuyo pero, por supuesto, en este caso aislado, probablemente no importe mucho.
— tripleee
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.