0

htmlエディターから単語数を数えるためのこのコードを入手しました。

(providing htmlData has already been set)
var rawWords = htmlData.replace(/<(?:.|\s)*?>/g, '')
                       .replace(/(\r\n|\n|\r)/gm,' ');
var filteredWords = rawWords.replace(/\[([^\]]+)\]/g,'')
                            .replace(/\s+/g, " ")
                            .replace(/^\s+|\s+$/g, "");

私が理解していることから、最初の行はhtmlを削除してから、すべての戻り値を削除します。

次の行では、角かっこで囲まれたものをすべて削除し(これは、単語数に影響を与えずにメモを追加するためです)、余分なスペースを削除します

しかし、これを入力すると:

Apple


Charlie

Tom

それは私に3ではなく6の単語数を与えます。なぜか分かりますか?私は正規表現が苦手です!!!!

本当にありがとう

4

3 に答える 3

1

これを試してみてください。簡単で、空白/数字を分割し、配列をカウントするだけです。

window.onload = function() {

    // get string as text
    var text = document.body.innerText;

    // replace all non letters (so we don't count 1 as a word)
    text     = text.replace(/[^a-zA-Z\s]/g, '');

    // split on whitespace
    var words = text.split(/[\s]+/);

    // output -- 52
    console.log('numwords', words, words.length); // numwords 52
}

以下の完全な例:

<html>
<head>
<script type="text/javascript">// script</script>
</head>
<body>

a b c d e f g
1 1 1 1 1 1 1




the quick brown fox jumped over the lazy dog.
the quick brown fox jumped over the lazy dog.
the quick brown fox jumped over the lazy dog.<br><br><br><br><br>
the quick brown fox jumped over the lazy dog.
the quick brown fox jumped over the lazy dog.

</body>
</html>
于 2012-05-23T18:54:37.483 に答える
1

これらの正規表現は見苦しく冗長です。私のアドバイスは、次のようなことを行ってクリーンアップされた HTML を取得することです。

var a=document.createElement('div')
a.innerHTML=htmlData;
textData=a.innerText

次に、単純な正規表現を使用してこれをループし、カウンターをインクリメントします。

var patt=new RegExp(/(^|\W)(\w+)($|\W)/g);
var counter=0;
var result=patt.exec(textData);
while(result!=null) {
  counter++;
  result=patt.exec(textData);
}

これは非常に大雑把です (そして、あなたにはうまくいかないかもしれない多くの仮定をします)、しかし、A/ あなたは「単語」の数 [あなたが取り組まなければならない定義] と B/あなたが望んでいたものを得る前に、膨大な量のテキストを置き換えたり削除したりする必要はありません。

HTH

于 2012-05-18T13:52:39.887 に答える
0

スペースを "" に置き換えても、このようには機能しません。試す:

 .replace(/[ ]{2,}/gi," ");  /*{2,}=repeated*/
 .replace(/(^\s*)|(\s*$)/gi,"");

それ以外の:

.replace(/\s+/g, " ")
.replace(/^\s+|\s+$/g, "");

そしてそれはうまくいくはずです。

于 2013-03-31T13:49:57.510 に答える