2011-03-08 28 views
0

我有一個小腳本,它接受來自文本輸入的值並需要部分或完全匹配數組中的項目。正則表達式:Match部分或完整字符串

我正在努力與正則表達式和語法,並想知道如果我可以挑選你的大腦。

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

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

我需要liveFilter.val()和正則表達式以匹配當前的數組項liveFilterData [I]因此,如果在H或在文本框中ħ有人類型,它會檢查是否有在匹配項陣列。如果他們輸入他或他然後它匹配頭,標題或標題。

對不起,我已經瀏覽了網絡上關於如何構建正則表達式,但我無法解決它。

回答

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()是一個正則表達式,還是隻是一個字符串,你試圖匹配數組中的任何值?我猜你在文本框的按鍵,keydown或按鍵上有一個事件,並且上面編寫的代碼在此事件的回調中運行。如果是這樣,有很多事情可以將值轉換爲合適的正則表達式:"^"+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); 
    } 
} 

希望這會有所幫助!

相關問題