私は JavaScript の初心者で、単語が Web ページに表示される回数を数える方法がわかりません。
さまざまなフォーラムで調査しましたが、助けがありませんでした。この機能を実現するための提案やヒントをいただければ幸いです。
私は JavaScript の初心者で、単語が Web ページに表示される回数を数える方法がわかりません。
さまざまなフォーラムで調査しましたが、助けがありませんでした。この機能を実現するための提案やヒントをいただければ幸いです。
Greasemonkey スクリプトを使用して単語のインスタンスをカウントする場合は、次の 4 つの点に注意してください。
正規表現で特殊\b
文字, を使用して、実際に単語を取得できるようにします。
たとえば、/\bof\b/
「of」には一致しますが、「offer」には一致しません。
match()
プロパティにアクセスする前に 、常に結果が null でないことを確認してください。match(regex).length
多くの場合、例外がスローされます。
不注意なスクリプトが Web ページと相互に干渉する可能性があることに注意してください。 これは、他の回答の1つが機能しなかった理由の一部です。これを回避するには、ディレクティブ
を指定して、Greasemonkey のサンドボックスをオンに戻します。@grant
GM スクリプトはgrant none
、多くの状況でデフォルトで使用されるようになりました!
Google などの多くのサイトでは、Greasemonkey スクリプトが実行されてからかなり後にAJAX を介してコンテンツが読み込まれることに注意してください。それを補うための多くの戦略があります。おそらく最も簡単な方法は、タイマーを使用することです。
すべてをまとめると、これらすべての問題を補う完全なスクリプトがここにあります。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; \
} \
" );
これはあなたにとってのスタートです。現状では、他の単語の内部に存在するインスタンスと一致します。たとえば、「coffee」は「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);
});
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);