统计jquery中一个区分大小写的单词在一个段落中出现的次数

Count the number of occurence of a case sensitive word in a paragraph in jquery

本文关键字:一个 段落中 jquery 统计 大小写 单词      更新时间:2023-09-26

我想统计一个特定单词在一个段落中出现的次数。

我正在写我的代码键下事件。我一开始可能只有几百个单词,以后可能会增加。

所以当用户键入i时,它将匹配段落中的单词,然后得到出现的次数。我还需要确保匹配是区分大小写的。

现在我正在使用这个代码:

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

其中AP为要匹配的关键字。

但我对此不太满意。

实际上我有一个几百个关键字的列表,我如何有效地实现它

请注意要匹配的单词两边都有空格,即它们是边界词

感谢您的帮助

您可以尝试如下操作:

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(),你会得到部分匹配,例如,如果你寻找"other",它也会匹配"bother"(等等),但是对于正则表达式,我使用'b来测试单词边界。

对于一个大的单词列表,你可能想要提前创建所有的正则表达式,而不是在循环中重新做它们,但它似乎对我的简单测试很好,所以我认为我不会开始做过早的优化。

如果split()不区分大小写,那么我会考虑使用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++;
    }
  }
});

我还没有测试过,但我希望你能明白。