您可以嘗試類似如下:
var wordList = ["some", "word", "or", "other", "CASE", "Sensitive", "is", "required"],
wordCount = [];
for (var i=0; i < wordList.length; i++)
wordCount[i] = 0;
$("#someField").keyup(function(){
var i,
text = this.value,
re;
for (i = 0; i < wordList.length; i++) {
re = new RegExp("\\b" + wordList[i] + "\\b", "g");
wordCount[i] = 0;
while (re.test(text)) wordCount[i]++;
}
});
演示:http://jsfiddle.net/zMdYg/2/(更新了更長的單詞列表)
我真的不知道你想要的結果做什麼,所以我我只是將它們放在一個簡單的數組中,但是您可以在演示中看到我將它們輸出到頁面,以便您可以看到它工作。很明顯,你會替換你自己的需求。
這是使用正則表達式來測試每個單詞。你會注意到,與.split()
或.indexOf()
你會得到部分匹配,例如,如果你尋找「其他」,它也將通過「麻煩」(等等)中途匹配,但與正則表達式我已經使用\b
測試字邊界。
對於大量的單詞,您可能需要預先創建所有正則表達式,而不是在循環中快速重做它們,但它似乎對我的簡單測試正常工作,所以我認爲我不會開始做過早優化。我將把它作爲讀者的練習...
段落是否開始預填充,還是全部是用戶輸入嗎?用戶是否可以剪切/粘貼文本? – mrtsherman 2011-12-27 05:06:55
@mrtsherman這是一個文本框,所以用戶可以鍵入以及剪切副本等 – Moons 2011-12-27 05:08:58
因此,你想保持關鍵字的運行計數器,因爲他們鍵入到文本框?也就是說,如果某人鍵入「要成爲或不成爲」,那麼在鍵入第一個「to」後,dict [「to」]得到值1,然後在鍵入第二個「to」之後,得到值2 (假設「to」在您的字典中)。這是這個想法嗎? – BobS 2011-12-27 05:15:35