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.