• ベストアンサー

javascriptで同文字の出現回数を調べるには

javascriptで入力チェック時に以下の条件を満たすようにしたいのですが、 簡単にできる方法はないでしょうか。 条件 ・文字列内に同じ文字が指定回数以上出現していたらアラートを出したい。 例)「1a1b1a1c」という文字列があったとすると、「1」の出現回数は4。 「a」の出現回数は2。「b」「c」の出現回数は1。 といったように、連続しているとは限らないある特定の文字が 何回出現しているかを知るにはどうしたら良いでしょうか。 正規表現で試みたのですが、どうにもできず困っております。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

普通にデータを順番に検証してみては? <script> var str="1a1b1a1c"; var obj=new Object(); for(var i=0;i<str.length;i++){ var j=str.substr(i,1); if(!obj[j]) obj[j]=0; obj[j]++; } for(var i in obj){ document.write(i+"="+obj[i]+"<br>\n"); } </script>

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • gorusura
  • ベストアンサー率59% (25/42)
回答No.3

正規表現で無駄にやってみた場合…… var str = "a1b1c1c1", char, result = [], length = 0, regexp; while (char = str.charAt(0)) { result[length++] = char + ':' + str.match(regexp = new RegExp(char, 'g')).length; str = str.replace(regexp, ''); } alert(result.join('\n'));

すると、全ての回答が全文表示されます。
回答No.2

こそっ。 function hoge (_, l) {  _[l] = (_[l] || 0) + 1; return _; } var str="1a1b1a1c"; var obj = str.split('').reduce (hoge, {}); for(var i in obj)  if (obj.hasOwnProperty(i))   document.write(i+"="+obj[i]+"<br>\n");

すると、全ての回答が全文表示されます。

関連するQ&A