0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

3桁区切りを極める!正規表現 vs forループ

Posted at

Paizaの問題を解いていたら、「数字を3桁ごとにカンマ区切りする」という場面に遭遇。
最初は直感でforループを書いたけど、「もっとスマートな方法あるのでは?」と気づいたので、いくつかの解法を比較してみる。


問題概要

入力例:

123456789  

出力例:

123,456,789  

数値を3桁ごとにカンマ区切りで出力する。入力される数値は3の倍数。


解法①: 正規表現 .match() を使う

const result = input.match(/.{1,3}/g).join(",");
console.log(result);  // 123,456,789

🔍 ポイント

  • / で囲まれた部分が正規表現
  • .{1,3} で1〜3文字のグループを作る
  • g はグローバルフラグで、文字列全体に対してマッチを繰り返す

この方法のポイントは、余った文字(この例では最後の “j”)もそのまま結果に含まれる点。

.match() で配列化し、.join(",") でカンマを挿入・結合


✅ メリット: シンプルで短いコード
❌ デメリット: 数の先頭から3文字ずつ切るので、1,234,567 みたいなフォーマットにはならない


解法②: forループで手動処理

let result = "";

for (let i = 0; i < input.length; i++) {
    if (i % 3 === 0 && i !== 0) result += ",";
    result += input[i];
}

console.log(result);  // 123,456,789

🔍 ポイント

  • 3文字ごとに if でカンマを挿入
  • シンプルで可読性が高い

✅ メリット: 直感的で理解しやすい
❌ デメリット: カスタマイズ性が低い


解法③: .split().map() を活用


const result = input.split("").map((char, index) => 
    (index % 3 === 0 && index !== 0 ? "," : "") + char).join("");

console.log(result);  // 123,456,789

🔍 ポイント

  • .split("") で配列化し、.map() でカンマを追加
  • .join("") で連結

✅ メリット: 配列操作に慣れている人なら直感的
❌ デメリット: ちょっと冗長


まとめ

短さ優先 → match() を使う
初心者向け → forループ で素直に書く
応用力重視 → split() & map() を使う

僕の失敗談と解決話!

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?