web-dev-qa-db-ja.com

JavaScriptを使用した正確な単語数の正規表現

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

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

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

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

私がまとめたもう1つ:

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

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

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

15
木川 炎星

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

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

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

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

36
David Tang

空白ではなく、単語の境界があるものはすべて数えてみてください。

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

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

value.split(/[\u0080-\uFFFF\w]+/g).length
7
morja

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

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

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

あなたはすべての言葉を得る。

説明:

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

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

4
geekdenz

正しい正規表現は/s+/単語以外を破棄するには:

'Lorem ipsum dolor , sit amet'.split(/\S+/g).length
7
'Lorem ipsum dolor , sit amet'.split(/\s+/g).length
6
2
albertov

試してみてください

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

これは、Wordに含めることができる文字列と一致します。一方、次のようなものです。

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

ユーザーがコンマまたはスペースが続かない他の句読点を追加した場合、またはその両側にスペースを含むコンマを追加した場合、誤ったカウントになります。

1
mpjan

このようにメソッドを拡張/変更できます

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

1
Valerij

私のsimpleFuncJSと呼ばれるJavaScriptライブラリには、「count()」と呼ばれる関数があります。

たとえば、単語でいっぱいの文字列がある場合、次のように関数ブラケットの間に配置するだけです。

count("How many words are in this string?");

次に、関数を呼び出します。この関数は、単語数を返します。また、この関数は空白を無視するように設計されているため、正確な結果が得られます。

この関数の詳細については、 http://docs.funcjs.webege.com/count().html のドキュメントをお読みください。また、FuncJSのダウンロードリンクもこのページにあります。

これがこれをやりたい人に役立つことを願っています! :)

0
Sharikul Islam