2011-12-27 23 views
0

我想計算段落中特定字的出現次數。在jquery中對段落中出現的區分大小寫的字符數進行計數

我正在寫關鍵事件的代碼。我最初可能會有幾百個字,後面可能會增加。

所以當用戶輸入時,我會匹配段落中的單詞,然後獲取發生次數。我還需要確保比賽是區分大小寫的。

現在我使用此代碼:

$('.msg').val().split("AP").length - 1 

其中AP是相匹配的關鍵字。

但我對此並不滿意。

其實我有幾百個關鍵字的列表,我如何有效地實現它。

請注意的話,以配合對兩側的空間,即他們是邊界話

任何幫助表示讚賞

+0

段落是否開始預填充,還是全部是用戶輸入嗎?用戶是否可以剪切/粘貼文本? – mrtsherman 2011-12-27 05:06:55

+0

@mrtsherman這是一個文本框,所以用戶可以鍵入以及剪切副本等 – Moons 2011-12-27 05:08:58

+0

因此,你想保持關鍵字的運行計數器,因爲他們鍵入到文本框?也就是說,如果某人鍵入「要成爲或不成爲」,那麼在鍵入第一個「to」後,dict [「to」]得到值1,然後在鍵入第二個「to」之後,得到值2 (假設「to」在您的字典中)。這是這個想法嗎? – BobS 2011-12-27 05:15:35

回答

2

您可以嘗試類似如下:

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測試字邊界。

對於大量的單詞,您可能需要預先創建所有正則表達式,而不是在循環中快速重做它們,但它似乎對我的簡單測試正常工作,所以我認爲我不會開始做過早優化。我將把它作爲讀者的練習...

1

如果拆分()不區分大小寫的,然後我會看看使用的indexOf (),區分大小寫。

因此,也許是這樣的:

var words_array = ['one', 'two', 'three']; 
var carot = 0; 
var n_occurences = 0; 

$.each(words_array, function(index, value){ 

    while(carot < $('.msg').val().length && carot > -1){ 

    carot = $('.msg').val().indexOf(' ' + words_array[index] + ' ', carot); 

    if (carot > -1){ 

     n_occurences++; 
    } 
    } 
}); 

我沒有測試過這一點,但我希望你的想法。

相關問題