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

Valeria Raciti
fuente
Intenta usar esto Probador de expresiones regulares .
AFH
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 
Toto
fuente
(?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