我是javascript的初学者,不知道如何计算单词出现在网页中的次数。
我在不同的论坛上研究但没有得到帮助。我真的很感激任何有关实现此功能的建议或提示。
答案 0 :(得分:3)
如果您想使用Greasemonkey脚本来计算单词的实例,需要注意以下四点:
在正则表达式中使用the special \b
character确保您实际获得 字 。
例如,/\bof\b/
匹配“of”但不匹配“offer”。
在尝试访问其属性之前,请始终检查match()
结果是否为空! match(regex).length
会在很多时候抛出异常。
请注意粗心脚本可能会相互干扰网页。这是其中一个其他答案无效的部分原因。
要避免这种情况,请通过指定@grant
指令重新打开Greasemonkey的沙箱。在许多情况下,GM脚本现在默认为grant none
!
在Greasemonkey脚本启动很久之后,请注意许多网站,例如Google,通过AJAX加载内容。有很多策略可以弥补这一点。也许最直接的是使用计时器。
总而言之,一个完整的脚本可以补偿所有这些问题。您还可以see the code in action at jsFiddle:
// ==UserScript==
// @name _Show word counts
// @include http://YOUR_SERVER.COM/YOUR_PATH/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @grant GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
introduced in GM 1.0. It restores the sandbox.
*/
$("body").append ('<div id="gmWordCount"></div>');
checkWordCount (); //-- Initial run, works for static HTML only.
//--- Check for AJAX loaded words... Over twice a sec is plenty fast.
var wordChkTimer = setInterval (checkWordCount, 444);
function checkWordCount () {
//--- Search for "of" as a whole word.
var wordStr = "of";
var wordRegex = new RegExp ("\\b" + wordStr + "\\b", "gi");
var matchRez = $(document.body).text ().match (wordRegex);
var wordCount = matchRez ? matchRez.length : 0;
//--- Display the results.
var countReport = '';
switch (wordCount) {
case 0:
countReport = '"of" was not found!'
break;
case 1:
countReport = '"of" was found one time.'
break;
default:
countReport = '"of" was found ' + wordCount + ' times.'
break;
}
//--- Display results to the user.
$("#gmWordCount").text (countReport);
}
//--- Position and style the display output,
GM_addStyle ( " \
#gmWordCount { \
background: orange; \
position: fixed; \
top: 0; \
left: 0; \
width: 100%; \
z-index: 6666; \
} \
" );
答案 1 :(得分:1)
这是一个开始。就目前而言,它将匹配其他单词中存在的实例,例如“咖啡”将计为“of”,它会干扰其他页面,我还没有检查jQuery是否已经存在。所以你需要自己做一些工作。
// ==UserScript==
// @name Count words
// @namespace count
// @version 1
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js
// ==/UserScript==
$(function(){
var word='of'; // put your word here
var regex = new RegExp(word, "gi")
alert ($('body').text().match(regex).length);
});
答案 2 :(得分:0)
var text = document.body.textContent
.replace(/\r?\n?/g, "") // removes lines
.replace(/\s{2,}/g, " "), // removes duplicate spaces
word = new RegExp("of", "gi");
alert(text.match(word).length);