регулярное выражение не соответствует частично строке

регулярное выражение не соответствует частично строке

Я видел, что кто-то уже задавал этот вопрос, но ответ не сработал в моем случае. У меня есть reg exp, структурированный следующим образом:

/regexp/(?i:mktg)

чтобы избежать условий регистра символов. Мне нужно будет построить это выражение, содержащее "mktg", но не содержащее слова "round"И"SMP" в любом регистре. Кто-нибудь готов помочь? Я уже пробовал /regexp/([^?i:SMP])и /regexp/^((?!SMP).)*$, но они все равно будут дергать за эту ниточку.

Спасибо,

Валерия

решение1

Насколько мне известно, это должно сработать:

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

Объяснение:

^           : 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

Тестовые случаи:

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

Связанный контент