0

ホテルリストを検索するための正規表現に取り組んでいます。「testinghotelplaza」、「testing2 newhotel plaza」、「plazahotel」などの名前があります。

基本的に私の要件は、ユーザーがプラザを入力した場合、「プラザ」を含むすべてのホテルにデータを入力する必要があります...しかし、ユーザーが「アザ」を入力した場合、結果は表示されません。要するに、与えられた文字列で、ユーザーが入力した文字列で始まる単語があるかどうかを見つける必要があります。そうであれば、結果を表示します。

これは私が立ち往生していて機能していないコードです。

var regex = new RegExp("/\b"+searchString, "gi");
if (mainString.match(regex))
{
    return true;
}

これは機能していますが、中間の文字であっても、または私が望まない位置にある場合でも、すべての出現箇所を検出しています。

var regex = new RegExp(searchString , "gi");
if (mainString.match(regex))
{
    return true;
}
4

1 に答える 1

1

このようにコンストラクターを呼び出す場合RegExp、正規表現はスラッシュ()で囲まれて/.../いませんが、文字列の先頭にスラッシュがあります。また、エスケープシーケンスのバックスラッシュは自分でエスケープする必要があるため、使用する必要があるのは次のとおりです。

var regex = new RegExp("\\b"+searchString, "gi");

編集:

はい、\bはに関連して定義されているため[A-Za-z0-9_]、非ASCII文字に関してはこれは確かに問題があります。多かれ少なかれ複雑なルックアラウンドを使用してそれを解決することもできますが、ここでトリックを実行する可能性が最も高いはるかに簡単な解決策は、空白文字searchStringの最初または後に見つける必要があると言うことです:

var regex = new RegExp("(?:^|\\s)"+searchString, "gi");
于 2012-07-11T14:30:56.480 に答える