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文字の場合は必要になるようです。