2011-03-08 36 views
0

私は、テキスト入力から値を受け取り、配列内の項目の一部または全部を一致させる必要がある小さなスクリプトを用意しています。正規表現:部分一致または完全一致の文字列

私は現時点で正規表現と構文で苦労しており、あなたの脳を選ぶことができるかどうか疑問に思っています。

Iは、テキストボックスにHまたはHの誰かタイプ場合、一致する商品がある場合ので、それはチェック[I] liveFilter.val()と現在のアレイ項目liveFilterDataと一致する正規表現を必要
for (var i=0; i < liveFilterData.length; i+=1) { 

    if (liveFilterData[i].match(liveFilter.val())) { 
     alert(); 
    } 
} 

配列。彼らが彼または彼を入力する場合、それはヘッド、ヘッダーまたは見出しと一致します。

申し訳ありませんが、私は正規表現を作成する方法についてウェブ全体を見てきましたが、私はそれを解決できません。

答えて

1

単純な文字列比較は、トリックを行うSHOLD:

for (var v, i = liveFilterData.length; i--;) { 
    if (liveFilterData[i].slice (0, (v = liveFilter.val().toLowerCase()).length) === v) { 
     alert(); 
    } 
} 

liveFilterDataは小文字の単語が含まれている必要があります。

0

私は完全に質問を理解していません。 liveFilter.val()は正規表現ですか、それとも単に配列の任意の値と照合しようとしている文字列ですか?私はあなたがテキストボックスのkeypress、keydownまたはkeypressにイベントを持っていることを推測しています、そして、あなたが上で書いたコードは、このイベントへのコールバックで実行されます。そうであれば、値を適切な正規表現に変換するためにできることがいくつかあります:"^"+liveFilter.val()、ループ内で正規表現を使用しているので、new RegExpでプリコンパイルする必要がありますので、ループは次のようになります。

//the i in the second param here is a flag indicating case insensitive 
//a hat '^' in regex means 'beginning of the input' 
regex = new RegExp("^"+liveFilter.val(), i); 
for (var i=0; i < liveFilterData.length; i+=1) { 
    // regex.test uses the precompiled regex, and determines if there is a match 
    if (regex.test(liveFilterData[i])) { 
     alert("matched " + i); 
    } 
} 

希望すると便利です。

関連する問題