17

テキストエリア内の単語数を正確にカウントする JavaScript コマンドの正規表現をまとめようとしています。

私が見つけた1つの解決策は次のとおりです。

document.querySelector("#wordcount").innerHTML = document.querySelector("#editor").value.split(/\b\w+\b/).length -1;

ただし、これは非ラテン文字 (例: キリル文字、ハングルなど) をカウントしません。それらを完全にスキップします。

私がまとめた別のもの:

document.querySelector("#wordcount").innerHTML = document.querySelector("#editor").value.split(/\s+/g).length -1;

ただし、ドキュメントが空白文字で終わらない限り、これは正確にカウントされません。カウントされる値に空白文字が追加されている場合、空のドキュメントでも 1 単語としてカウントされます。さらに、ドキュメントがスペース文字で始まる場合、余分な単語がカウントされます。

入力方法に関係なく、単語を正確にカウントするこのコマンドに入れることができる正規表現はありますか?

4

8 に答える 8

41

これはあなたが求めていることをするはずです:

value.match(/\S+/g).length;

文字列を分割するのではなく、空白以外の任意の文字列を照合します。

必要に応じて各単語を簡単に抽出できるという追加のボーナスがあります;)

于 2011-01-04T12:37:08.030 に答える
7

空白ではなく、単語の境界があるものをすべてカウントしてみてください。

value.split(/\b\S+\b/g).length

Unicode 範囲を使用することもできますが、次の範囲が完全かどうかはわかりません。

value.split(/[\u0080-\uFFFF\w]+/g).length
于 2011-01-04T12:35:37.510 に答える
4

私にとっては、これが最良の結果をもたらしました:

value.split(/\b\W+\b/).length

var words = value.split(/\b\W+\b/)

あなたはすべての言葉を手に入れます。

説明:

  • \b は単語境界です
  • \W は非単語文字で、大文字は通常否定を意味します
  • 「+」は、1 つ以上の文字または接頭辞付きの文字クラスを意味します

正規表現を学ぶことをお勧めします。彼らは非常に強力なので、持っているのは素晴らしいスキルです。;-)

于 2015-04-09T05:32:33.400 に答える
3

試す

    value.match(/\w+/g).length;

これは、単語に含まれる文字列に一致します。一方、次のようなもの:

    value.match(/\S+/g).length;

ユーザーがコンマやその他の句読点の後にスペースが続かないものを追加したり、コンマの両側にスペースを追加したりすると、カウントが正しくなくなります。

于 2013-11-28T00:53:54.637 に答える
2

正しい正規表現は/s+/、単語以外を破棄するためのものです。

'Lorem ipsum dolor , sit amet'.split(/\S+/g).length
7
'Lorem ipsum dolor , sit amet'.split(/\s+/g).length
6
于 2011-01-04T13:59:57.930 に答える
1

このような方法を拡張/変更できます

document.querySelector("#wordcount").innerHTML = document.querySelector("#editor").value.split(/\b\(.*?)\b/).length -1;メールアドレスなども照合したい場合

document.querySelector("#wordcount").innerHTML = document.querySelector("#editor").value.trim().split(/\s+/g).length -1;

Unicode\sの としても使用してみてください\w

ソース: http://www.regular-expressions.info/charclass.html

于 2011-01-04T12:38:20.500 に答える
0
const wordsCount = str.match(/\p{L}+/gu).length
于 2022-01-13T19:16:01.370 に答える