ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

JavaScriptで単語数カウント

現在は文字数を1秒ごとに取得している部分を、単語数に変更したいとの要望があり、対応しました。

単語数なので、区切りをスペースにすればいいというのはすぐに思いつきましたが、「,」と「.」も対応するとなると、何度も区切る処理が必要になります。
単純化するために、「,」と「.」をスペースに置き換えた後に、スペースで区切ることにしました。

var work1 = work.replace(/\,/g, ' ');
var work2 = work1.replace(/\./g, ' ');
var work_array = work2.split(' ');

var count = work_array.length;

これで試すと、スペースを続けていると空文字がwork_arry変数に代入されて、単語数が正しくない場合がありました。
対策として、空文字の配列要素を削除するようにしたら、予定通りの結果になりました。

var work1 = work.replace(/\,/g, ' ');
var work2 = work1.replace(/\./g, ' ');
var work_array = work2.split(' ');

var len = work_array.length - 1;
var i;
for(i = len; i >= 0; i--){
    if(work_array[i] == ""){
        work_array.splice(i,1);
    }
}

var count = work_array.length;    

ここまで辿りつくと簡単なことだと思うのですが、正規表現が苦手なため、当初「,」と「.」がスペースに置き換わらない理由がわからず、マッチさせる文字の前に\マークを書いて、やっと正しく動作するようになりました。
1文字の場合は必要になるようです。