1

lunr.jsを使用しています。

以下のこのJavascriptコード

  • 最初の検索からクエリ パラメータを取得します
  • バインディング + 文字をスペースに置き換えます
  • 次の検索のために、変更されたクエリを検索フィールドに保存します
  • 次に、最終的に変更されたクエリを使用して検索します
var query = getUrlParameter('q');
var queryWithoutPlus = query.replace(/\+/g, " ");
searchField.value = queryWithoutPlus
index.search(queryWithoutPlus);

そのため、クエリ パラメータ文字列は次のようにtest+ABCD+Test++Test2+-Test+-Test+Testなり、コードはクエリ パラメータの + 文字qをスペースに置き換えて、ユーザーに結果を適切に表示しますが、検索文字列は次のようになります。

「テスト+テスト-テスト」

現在の結果

「テストテスト-テスト」

私は期待するだろう

「テスト+テスト-テスト」

次のようなtempQueryを使用して、クエリを数回続けて変更しようとしました

var tempQuery = query.replace(/\+\+/g, " -");
var queryWithoutPlus = tempQuery.replace(/\+\-/g, " -");

しかし、これは残りの+文字ではうまくいかず、気分が悪いので、助けが必要です.

正しい正規表現を使用するために要約するだけですか (それが何であれ、アドバイスを歓迎します)、または lunr.js でクエリパラメーターを使用するためのより良い方法がありますか?

4

1 に答える 1

2

否定の後読みクエリが必要です(?<!\+)

"test+ABCD+Test++Test2+-Test+-Test+Test".replace(/(?<!\+)\+/g, " ")
>> "test ABCD Test +Test2 -Test -Test Test"

前述のように、これは Microsoft などの一部のブラウザーでは利用できません。その場合、一時的な式に置き換える必要があります

"test+ABCD+Test++Test2+-Test+-Test+Test".replace(/\+\+/g, "#spaceplus#")
  .replace(/\+/g, " ").replace(/#spaceplus#/g, " +")
>> "test ABCD Test +Test2 -Test -Test Test"
于 2020-03-07T01:15:52.270 に答える