正規表現が文字列の一部と一致しない

正規表現が文字列の一部と一致しない

すでにこの質問をしている人がいるのを見ましたが、私の場合は返信がうまくいきませんでした。以下のような構造の正規表現があります。

/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 

関連情報