2012-04-11 14 views
1

javascriptでフィールドから値をとり、一致しないテーブルの行を隠すライブフィルタを作成しました。Javascriptの正規表現でアウトオブオーダーの文字列を一致させる方法

私はこのために使用する正規表現は非常に簡単です:/ inputValueで/ I

これは、それが唯一の順になっている文字と一致する素晴らしい作品が。たとえば:

inputValue = test 
string to match = this is a test sentence 

この例では一致しますが、私がしようとした場合:

inputValue = this sentence 
string to match = this is a test sentence 

を入力値が故障しているので、これは一致しません。

正規品を作成するにはどうすればよいですか?単語はスキップできますか?ここで

は、私が現在使用してループがある:お時間を

for (var i=0; i < liveFilterDataArray.length; i++) { 

    var comparisonString = liveFilterDataArray[i], 
    comparisonString = comparisonString.replace(/['";:,.\/?\\-]/g, ''); 

    RE = eval("/" + liveFilterValue + "/i"); 

    if (comparisonString.match(RE)) { 
    rowsToShow.push(currentRow); 
    } 
    if(currentRow < liveFilterGridRows.length - 1) { 
    currentRow++; 
    } else { 
    currentRow = 0; 
    } 
} 

感謝します。

クリス

+0

はおそらく 'RE =のeval( "/" + liveFilterValue.split(検索したい場合は+'|'+words.reverse().join(".*")を削除this.*sentence|sentence.*this/i

を作成します。 ").join(" | ")+"/i "); ' – mplungjan

+0

それは1つの警告でトリックを行い、単語i、eのいずれかを含む結果を見つけます。言葉は「これは」両方のときにだけ一致する必要がありますに発生するため、 inputValueでは=と一致するように、この文 第一列は=これが一致するように、テスト文 第二文字列です=これはテスト段落 あるそれは両方の文字列に一致します。それは両方の単語が含まれているので、最初の文字列。 ありがとうございます。 –

答えて

2

evalの代わりにRegExpを使用することをお勧めします。

DEMO

var words = liveFilterValue.split(" "); 
var searchArg = (words.length==1)?words:words.join(".*")+'|'+words.reverse().join(".*") 
var RE = new RegExp(searchArg,"i"); 

それは「あなただけthis.....sentenceないsentence....this

+0

それはそれを行った。誰もが助けてくれてありがとう。 –

0

あなたは、スペース上の入力文字列を分割し、各単語のためのフィルタを順次実行することができます。

関連する問題