JavaScript 逆引き集 | split で文字列分割

JavaScript JavaScript
スポンサーリンク

JavaScript文字列の分割(split)の基本と実践

文字列を「区切り文字」で分けて配列にするのが split。CSVの処理、URLやパスの分解、複数行テキストの扱いなどで頻出です。初心者でもすぐ使える定番メソッドです。


概要と構文

// 基本
const parts = str.split(separator, limit);
JavaScript
  • separator: 区切り文字または正規表現。省略すると「文字列全体を1要素の配列」で返す。
  • limit: 返す要素数の上限(任意)。指定数を超える部分は切り捨てられる。
  • 返り値: 分割結果の配列。元の文字列は変更されない。

基本例(まずはここから)

// カンマで分割
"a,b,c".split(",");     // ["a", "b", "c"]

// 区切り文字を省略(そのまま1要素)
"a,b,c".split();        // ["a,b,c"]

// 空文字で分割(1文字ずつ)
"abc".split("");        // ["a", "b", "c"]

// limitで要素数を制限
"a,b,c,d".split(",", 2); // ["a", "b"]
JavaScript
  • ポイント: 区切り文字は自由に指定可能。空文字なら「一文字ずつ」、limitで「欲しい数だけ」取得できる。

実用テンプレート(すぐ使える定番)

// 1) CSVの1行を配列化(簡易)
const row = "Aki,22,Tokyo";
const cols = row.split(",");
console.log(cols); // ["Aki", "22", "Tokyo"]

// 2) パスやURLを分割
const path = "/users/123/profile";
const segments = path.split("/");
console.log(segments); // ["", "users", "123", "profile"]

// 3) 改行で複数行テキストを配列化
const text = "Line1\nLine2\nLine3";
const lines = text.split("\n");
console.log(lines); // ["Line1", "Line2", "Line3"]

// 4) Windowsの改行(\r\n)に対応して行分割
const windowsText = "Line1\r\nLine2\r\nLine3";
const lines2 = windowsText.split(/\r?\n/);
console.log(lines2); // ["Line1", "Line2", "Line3"]

// 5) 空白で単語分割(複数空白やタブもまとめて扱う)
const sentence = "Hello   world\tJS";
const words = sentence.trim().split(/\s+/);
console.log(words); // ["Hello", "world", "JS"]
JavaScript
  • ポイント: 改行は環境で異なるため正規表現 /\r?\n/ を使うと安全。空白分割/\s+/ で連続空白をまとめるのが定番。

正規表現の活用(柔軟な分割)

// 1) いずれかの区切り(カンマ or セミコロン)
"a,b;c".split(/[;,]/); // ["a", "b", "c"]

// 2) 数字の境界で分割(例:文字と数字の境で)
"ID123User456".split(/(?=\d)/); // ["ID", "123User", "456"]

// 3) 区切りの連続を1つにまとめる(縦横無尽な区切り)
"a,,b;;;c".split(/[;,]+/); // ["a", "b", "c"]

// 4) 区切りを含めず・含めて扱う(先読み/後読み)
"2025-12-04".split(/-/);      // ["2025", "12", "04"]
"2025-12-04".split(/(?=-)/);  // ["2025", "-12", "-04"]  // 区切り直前で分割(区切りを次要素に残す)
JavaScript
  • ポイント: 複数種類の区切りは文字クラス [ ... ]連続区切りは量指定子 +区切り保存は先読み/後読みで調整。

よくある落とし穴と対策

  • 連続する区切りが空要素を生む:
    • 例: "a,,b".split(",") // ["a", "", "b"]
    • 対策: 正規表現 /,+/ で連続区切りをまとめる、または filter で空要素を除去。
  • 前後の空白が混ざる:
    • 対策: trim() してから分割、または /\s*,\s*/ のように空白も含めて区切る。
  • オブジェクトへ直接は渡せない:
    • 対策: 分割後に map で型変換(数値化や整形)してから使う。
  • CSVの厳密対応が必要:
    • 例: 値にカンマや改行、ダブルクォートが含まれると素朴なsplitでは壊れる。
    • 対策: 厳密なCSVは専用パーサの利用を検討(自作する場合はクォートとエスケープの対応が必要)。
  • 改行コードの違いに未対応:
    • 対策: /\r?\n/ を使って Windows/macOS/Linux すべてをカバー。

練習問題(手を動かして覚える)

  • 基本のカンマ分割:
console.log("red,blue,green".split(",")); // ["red","blue","green"]
JavaScript
  • 複数空白をまとめて単語分割:
console.log("A   B\tC".split(/\s+/)); // ["A","B","C"]
JavaScript
  • カンマとセミコロンのどちらでも分割:
console.log("a,b;c;d".split(/[;,]/)); // ["a","b","c","d"]
JavaScript
  • 空要素を除いて分割:
const parts = "a,,b,,,c".split(",").filter(x => x !== "");
console.log(parts); // ["a","b","c"]
JavaScript
  • 行分割(改行差対応)して行番号を付与:
const text = "L1\r\nL2\nL3";
const numbered = text.split(/\r?\n/).map((line, i) => `${i+1}: ${line}`);
console.log(numbered);
// ["1: L1","2: L2","3: L3"]
JavaScript

タイトルとURLをコピーしました