如何使用javascript(在Greasemonkey脚本中)计算单词在网页中出现的次数?

时间:2012-12-26 08:21:27

标签: javascript jquery greasemonkey word-count

我是javascript的初学者,不知道如何计算单词出现在网页中的次数。

我在不同的论坛上研究但没有得到帮助。我真的很感激任何有关实现此功能的建议或提示。

3 个答案:

答案 0 :(得分:3)

如果您想使用Greasemonkey脚本来计算单词的实例,需要注意以下四点:

  1. 在正则表达式中使用the special \b character确保您实际获得
    例如,/\bof\b/匹配“of”但不匹配“offer”。

  2. 在尝试访问其属性之前,请始终检查match()结果是否为空! match(regex).length会在很多时候抛出异常。

  3. 请注意粗心脚本可能会相互干扰网页。这是其中一个其他答案无效的部分原因。 要避免这种情况,请通过指定@grant指令重新打开Greasemonkey的沙箱。在许多情况下,GM脚本现在默认为grant none

  4. 在Greasemonkey脚本启动很久之后,请注意许多网站,例如Google,通过AJAX加载内容。有很多策略可以弥补这一点。也许最直接的是使用计时器。

  5. 总而言之,一个完整的脚本可以补偿所有这些问题。您还可以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);