统计jquery中一个区分大小写的单词在一个段落中出现的次数
Count the number of occurence of a case sensitive word in a paragraph in jquery
我想统计一个特定单词在一个段落中出现的次数。
我正在写我的代码键下事件。我一开始可能只有几百个单词,以后可能会增加。
所以当用户键入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++;
}
}
});
我还没有测试过,但我希望你能明白。
相关文章:
- 我如何找到一个句子中的所有空格并替换忽略它们
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 使用类从一个标记中双击事件
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 有任何可能将facebook实时信使整合到一个网站中
- 正在传递JSONP标头's数据参数到另一个文件中的AJAX请求
- 在另一个函数中使用变量this
- 要求定义另一个文件中的对象
- 同一项怎么可能在一个实例中未定义,却在另一个实例上定义
- 从数组列表中随机选择一个段落 Javascript
- Javascript:如何找到在长段落中选择了特定文本的哪个实例(例如,一个单词在一段中出现多次)
- 在jquery中,我如何检测一个段落是否包含一个链接,并且只有一个链接而没有其他链接
- 如何在一个段落中放置不同的用户输入
- 统计jquery中一个区分大小写的单词在一个段落中出现的次数
- 段落中有一个'不应该出现的空格
- 检测段落中一个或多个单词的子字符串
- 尝试创建一种机制,在javascript中找到段落中的单词并将其替换为另一个单词
- 在HTML中获取一个段落的一行
- Javascript:如何判断一个span是否是段落中的第一件事
- 如何在文本段落中的每一个单词上添加跨度