JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで正規表現を使って文字列の単語数をカウントする方法

正規表現を活用すれば、JavaScriptで特定の文字列に含まれる単語数を簡単にカウントできます。本記事では、単語数を正確に求めるための基本的な手順をステップごとにわかりやすく解説します。

単語数カウントの基本手順

文章やフレーズは、通常スペースで区切られた単語の集まりで構成されています。しかし実際のテキストでは、単語同士が2つ以上の連続したスペースで区切られていたり、文字列の先頭や末尾に不要な空白が含まれていたりするケースがあります。こうした状況を考慮せずに単純に分割すると、正しい単語数を得られません。そのため、カウント前に以下の前処理を行うことが重要です。

ステップ1:文字列の先頭と末尾の空白を除去する

まず、文字列の先頭(^)と末尾($)にある空白文字を削除します。次の正規表現で実現できます。

str.replace(/(^\s*)|(\s*$)/gi,"");

ステップ2:連続する複数のスペースを1つにまとめる

続いて、2つ以上連続している半角スペースを1つのスペースに置き換えます。

str.replace(/[ ]{2}/gi," ");

ステップ3:改行直後のスペースを除外する

最後に、行頭にスペースが付いた改行を整形し、余分な空白による誤カウントを防ぎます。

str.replace(/\n /,"\n");

これらの処理を完了すると、すべての単語が1つのスペースで均一に区切られた文字列になります。この状態でsplit()メソッドに半角スペースを指定して呼び出すと、文字列は単語ごとの配列へと変換されます。あとは配列のlengthプロパティを参照するだけで、目的の単語数を取得できます。

サンプルコード

<html>
<body>
    <script>
        function countWords(str) {
            str = str.replace(/(^\s*)|(\s*$)/gi,"");
            str = str.replace(/[ ]{2}/gi," ");
            str = str.replace(/\n /,"\n");
            return str.split(' ').length;
        }
        document.write(countWords("   Tutorix is one of the best E-learning   platforms"));
    </script>
</body>
</html>

この例では、先頭に空白があり、途中にも連続したスペースを含む文字列を渡しています。countWords()関数内の前処理によって空白が正規化されるため、たとえ入力に不規則な空白が含まれていても、常に正確な単語数が返されます。

出力結果

8

対象の文字列「Tutorix is one of the best E-learning platforms」は8個の単語で構成されているため、結果として8が出力されます。

  1. C++で文字列内の単語数をカウントする方法を解説

    はじめに本記事では、スペース・改行文字(\n)・タブ文字(\t)を含む可能性のある文字列が与えられたとき、その文字列に含まれる単語の総数を計算し、結果を出力する方法を解説します。入出力例入力 − string str = welcome to\n tutorials point\t出力 − 文字列内の単語数 − 4説明 − 文字列には welcome、to、tutorials、point の4つの単語が含まれており、それ以外は単語間にあるスペース( )、改行文字(\n)、タブ文字(\t)です。入力 − string str = \nhonesty\t is the best policy出力

  2. C#で文字列が数値かどうかを判定する方法

    C#のプログラミングでは、文字列が数値(数字のみ)で構成されているかどうかを確認したい場面がよくあります。ここでは、LINQのAllメソッドとchar.IsDigitメソッドを組み合わせて、シンプルに判定する方法を紹介します。 確認対象となる文字列の例 まず、次のような文字列があるとします。 string str = 3456; 数値かどうかを判定する方法 この文字列が数値かどうかを確認するには、以下のように記述します。 str.All(c => char.IsDigit(c)) 上記のコードは、文字列内のすべての文字が数字であれば true を返し、一つでも数字以外の文字が含まれていれ