3

Remy Sharp の jQuery タグ提案プラグインの現在の実装は、タグの先頭での一致のみをチェックします。たとえば、「Photoshop」と入力しても、「Adobe Photoshop」という名前のタグは返されません。

デフォルトでは、検索では大文字と小文字が区別されます。余分なスペースを削除し、大文字と小文字を区別しないように少し変更しました。

for (i = 0; i < tagsToSearch.length; i++) {
    if (tagsToSearch[i].toLowerCase().indexOf(jQuery.trim(currentTag.tag.toLowerCase())) === 0) {
        matches.push(tagsToSearch[i]);
    }
}

私がやろうとしたことは、ユーザーが「Photoshop」と入力したときに「Adobe Photoshop」を返すことができるように、これを再度変更することです。を使用してみmatchましたが、パターンに変数が存在する場合は動作しないようです:

for (i = 0; i < tagsToSearch.length; i++) {
    var ctag = jQuery.trim(currentTag.tag);
    if (tagsToSearch[i].match("/" + ctag + "/i")) { // this never matches, presumably because of the variable 'ctag'
        matches.push(tagsToSearch[i]);
    }
}

この方法で正規表現検索を実行する正しい構文は何ですか?

4

3 に答える 3

5

JavaScript で正規表現を動的に実行する場合は、RegExp オブジェクトを使用する必要があります。あなたのコードは次のようになると思います(テストしていませんが、よくわかりませんが、一般的な考え方は正しいです):

for (i = 0; i < tagsToSearch.length; i++) {
    var ctag = jQuery.trim(currentTag.tag);
    var regex = new RegExp(ctag, "i")
    if (tagsToSearch[i].match(regex)) {
        matches.push(tagsToSearch[i]);
    }
}
于 2009-04-28T16:00:11.983 に答える
2

それ以外の

"/" + ctag + "/i"

使用する

new RegExp(ctag, "i")
于 2009-04-28T16:03:29.213 に答える
0

また、indexOfを引き続き使用して、===0を>=0に変更することもできます。

for (i = 0; i < tagsToSearch.length; i++) {
    if (tagsToSearch[i].toLowerCase().indexOf(jQuery.trim(currentTag.tag.toLowerCase())) >= 0) {
        matches.push(tagsToSearch[i]);
    }
}

しかし、繰り返しになりますが、私は間違っている可能性があります。

于 2009-04-28T16:15:00.777 に答える