0

文字列内の単語全体を検索する (ユーザーの検索クエリに一致する) 正規表現を作成しようとしていますが、特定の単語に到達した後はすべて無視したいと考えています。

考えられる検索結果の次のリストを想像してください。

  • Foo (Foo バーを参照)
  • バー (Foo バーを参照)
  • フーバー

正規表現を使用してリスト内の各項目をテストし、「see」という単語の後のすべてを無視したいと考えています。例えば:

  • ユーザーが「foo」を検索する場合、1 番目と 3 番目の項目を一致させたいと思います。
    • Foo (Foo バーを参照)
    • バー (Foo バーを参照)
    • フーバー_
  • ユーザーが「bar」を検索した場合、2 番目と 3 番目の項目を一致させたいと思います。
    • Foo (Foo バーを参照)
    • バー(Foo バーを参照)
    • フーバー_

私が思いついた正規表現はこれです:

^(?!\(see)(\b%SEARCH%)

...where%SEARCH%は、検索語が何であれ置き換えられます。

残念ながら、これはすべての場合に機能するとは限りません。検索語が文字列の先頭にある場合 (例: "foo")、アイテムは正しく一致するように見えますが、検索語が文字列の後半にある場合 (例: リストの 3 番目の項目にある "bar") は一致しません。 .

問題を説明するjsfiddle を次に示します。1 番目と 3 番目の例ではすべてが期待どおりに機能しますが、2 番目の例では 3 番目の項目 (「Foo Bar」) も一致するはずですが、一致していません。

私は何を間違っていますか?

ノート:

  • 単語全体のみに一致させたいので、\b
  • i修飾子 (大文字と小文字を区別しないため) とg修飾子 (すべての一致を検索するため)も使用しています。
4

1 に答える 1