expresión regular que no coincide parcialmente con una cadena

expresión regular que no coincide parcialmente con una cadena

He visto que ya alguien hizo esta pregunta, pero la respuesta no funcionó en mi caso. Tengo una experiencia regular 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 probado /regexp/([^?i:SMP])y /regexp/^((?!SMP).)*$, pero aún así moverán este hilo.

gracias,

valeria

Respuesta1

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 

información relacionada