【JavaScript】split の使い方|文字列を配列に変換・区切り文字・正規表現・limit・join との組み合わせまで解説

split は文字列を指定した区切り文字で分割し、配列に変換するメソッドです。CSV の解析、URL パラメータの分解、タグの分割など、文字列を個別の要素に分けて処理する場面で必ず使うメソッドです。

この記事でわかること
・split の基本構文と戻り値
・カンマ・スペース・改行など各区切り文字での分割
・正規表現による複雑な分割パターン
・limit(分割数の制限)の使い方
・空文字で 1 文字ずつ分割する方法
・join との組み合わせ(split → 加工 → join)
・Array.from・スプレッド構文との違い
・空要素の除去テクニック
・CSV 解析・URL パース・テンプレート処理の実務パターン
スポンサーリンク

split の基本構文

構文
const array = str.split(separator, limit);
// separator: 区切り文字(文字列 or 正規表現)。省略すると元の文字列1つの配列
// limit:     結果の配列の最大要素数(省略可)
// 戻り値:    分割された文字列の配列
基本例
console.log("a,b,c".split(","));     // ["a", "b", "c"]
console.log("Hello World".split(" ")); // ["Hello", "World"]
console.log("abc".split(""));          // ["a", "b", "c"](1文字ずつ)
console.log("abc".split());            // ["abc"](分割されない)

元の文字列は変更されません。split は常に新しい配列を返します。

よく使う区切り文字のパターン

区切り文字 コード例 結果
カンマ "a,b,c".split(",") ["a", "b", "c"]
スペース "a b c".split(" ") ["a", "b", "c"]
改行 "a\nb\nc".split("\n") ["a", "b", "c"]
ハイフン "2026-03-31".split("-") ["2026", "03", "31"]
スラッシュ "path/to/file".split("/") ["path", "to", "file"]
空文字 "abc".split("") ["a", "b", "c"]

複数文字の区切り文字

JavaScript
// 区切り文字は1文字でなくてもよい
console.log("aXXbXXc".split("XX")); // ["a", "b", "c"]

// 改行コード \r\n(Windows)
console.log("line1\r\nline2\r\nline3".split("\r\n"));
// ["line1", "line2", "line3"]

正規表現で分割する

区切りパターンが一定でない場合は、正規表現を使います。

1つ以上のスペースで分割
// 連続スペースがあっても正しく分割
console.log("apple  banana   cherry".split(/\s+/));
// ["apple", "banana", "cherry"]
複数の区切り文字をまとめて指定
// カンマ、セミコロン、スペースのいずれかで分割
console.log("a,b;c d".split(/[,;\s]/));
// ["a", "b", "c", "d"]
改行コードをまとめて分割
// \r\n / \n / \r のいずれでも分割
console.log("line1\r\nline2\nline3\rline4".split(/\r?\n|\r/));
// ["line1", "line2", "line3", "line4"]

キャプチャグループ付きの正規表現

正規表現にキャプチャグループ () を含めると、区切り文字自体も結果の配列に含まれます。

JavaScript
// キャプチャなし: 区切り文字は除去される
console.log("a1b2c3d".split(/\d/));
// ["a", "b", "c", "d"]

// キャプチャあり: 区切り文字も配列に含まれる
console.log("a1b2c3d".split(/(\d)/));
// ["a", "1", "b", "2", "c", "3", "d"]
この仕組みを使うと、区切り文字を保持したまま文字列を分割できます。テンプレートエンジンのパーサーなどで活用されるテクニックです。

limit で分割数を制限する

JavaScript
const csv = "apple,banana,cherry,date,elderberry";

// 最大3要素まで
console.log(csv.split(",", 3)); // ["apple", "banana", "cherry"]

// limit=1 → 分割しない(先頭だけ)
console.log(csv.split(",", 1)); // ["apple"]

// limit=0 → 空配列
console.log(csv.split(",", 0)); // []
limit は「最大要素数」であり「分割回数」ではありません。limit=3 なら配列の要素は最大 3 個で、4 番目以降の部分は捨てられます(他の言語では残りを最後の要素にまとめる仕様のものもあるため注意)。

1 文字ずつ分割する方法の比較

方法 コード サロゲートペア対応
split("") "abc?".split("") × 壊れる(4要素)
スプレッド構文 [..."abc?"] ○ 正しい(4要素: a, b, c, ?)
Array.from Array.from("abc?") ○ 正しい
JavaScript
const str = "Hello?";

// split(""): サロゲートペアが壊れる
console.log(str.split("").length); // 7(?が2要素に分割)

// スプレッド構文: サロゲートペア対応
console.log([...str].length); // 6(正しい)

// Array.from: 同様に対応
console.log(Array.from(str).length); // 6
絵文字を含む文字列を 1 文字ずつ分割するなら、split("") ではなく [...str] または Array.from(str) を使ってください。

split と join の組み合わせ

split で分割 → 配列メソッドで加工 → join で結合するパターンは、文字列変換の定番テクニックです。

文字列の置換(replaceAll の代替)
// split + join で全置換
const str = "2026-03-31";
console.log(str.split("-").join("/")); // "2026/03/31"
単語の先頭を大文字に(Title Case)
function toTitleCase(str) {
  return str
    .split(" ")
    .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
    .join(" ");
}

console.log(toTitleCase("hello world")); // "Hello World"
文字列を逆順にする
function reverse(str) {
  return [...str].reverse().join("");
}

console.log(reverse("Hello")); // "olleH"
console.log(reverse("abc?")); // "?cba"(スプレッド構文で絵文字対応)

空要素を除去するテクニック

区切り文字が連続する場合、split の結果に空文字 "" が含まれます。

JavaScript
console.log("a,,b,,c".split(","));
// ["a", "", "b", "", "c"](空要素が含まれる)

// filter(Boolean) で空要素を除去
console.log("a,,b,,c".split(",").filter(Boolean));
// ["a", "b", "c"]

// 先頭・末尾の区切り文字も同様
console.log(",a,b,c,".split(",").filter(Boolean));
// ["a", "b", "c"]
filter(Boolean) は空文字 ""nullundefined0false を除去します。0false を保持したい場合は filter(x => x !== "") を使ってください。

実務でよく使うパターン

CSV の 1 行をオブジェクトに変換する

JavaScript
function csvRowToObject(headers, row) {
  const values = row.split(",");
  const obj = {};
  headers.forEach((key, i) => {
    obj[key] = values[i];
  });
  return obj;
}

const headers = ["name", "age", "city"];
const row = "田中,30,東京";

console.log(csvRowToObject(headers, row));
// { name: "田中", age: "30", city: "東京" }

URL のクエリパラメータをオブジェクトに変換する

JavaScript
function parseQuery(queryString) {
  return queryString
    .replace(/^\?/, "")  // 先頭の ? を除去
    .split("&")
    .reduce((obj, pair) => {
      const [key, value] = pair.split("=");
      obj[decodeURIComponent(key)] = decodeURIComponent(value || "");
      return obj;
    }, {});
}

console.log(parseQuery("?q=javascript&lang=ja&page=2"));
// { q: "javascript", lang: "ja", page: "2" }

タグの一括処理

JavaScript
const input = "JavaScript, TypeScript, React, Node.js";

// カンマ+スペースで分割 → 前後の空白を除去
const tags = input.split(",").map(tag => tag.trim());
console.log(tags);
// ["JavaScript", "TypeScript", "React", "Node.js"]

ファイルパスの分解

JavaScript
const path = "/home/user/documents/report.pdf";
const parts = path.split("/").filter(Boolean);

console.log(parts);
// ["home", "user", "documents", "report.pdf"]

const filename = parts[parts.length - 1];
const [name, ext] = filename.split(".");
console.log(name); // "report"
console.log(ext);  // "pdf"

関連記事

よくある質問

Qsplit(“”) で絵文字が壊れるのはなぜですか?
Asplit("") は UTF-16 コードユニット単位で分割するため、サロゲートペア(絵文字)が 2 要素に分割されます。1 文字ずつ正しく分割するには [...str](スプレッド構文)または Array.from(str) を使ってください。
Qsplit の結果に空要素が含まれます。除去するには?
A.filter(Boolean) で空文字 "" を除去できます。ただし 0false も除去されるため、数値を含む配列では .filter(x => x !== "") を使いましょう。
Qsplit と replaceAll はどう使い分けますか?
A文字列の一部を置換したいなら replaceAll(または split + join)。文字列を分割して配列として処理したいなら splitsplit("-").join("/")replaceAll("-", "/") と同じ結果です。
Qlimit を指定すると残りの部分はどうなりますか?
AJavaScript の split では limit を超えた部分は捨てられます。Python の split("," , 2) のように残りを最後の要素にまとめる動作ではない点に注意してください。
Qsplit と join は逆操作ですか?
Aはい。"a,b,c".split(",")["a", "b", "c"]["a", "b", "c"].join(",")"a,b,c" です。split で分割 → 配列メソッドで加工 → join で結合するパターンは文字列変換の定番です。

まとめ

split は文字列を配列に変換する基本メソッドです。

  • 基本: str.split(separator) で区切り文字ごとに分割
  • 正規表現: /\s+/ で連続スペース、/[,;\s]/ で複数区切り文字
  • limit: 分割数の上限(超えた部分は捨てられる)
  • 絵文字: split("") ではなく [...str] を使う
  • split + join: 分割→加工→結合で文字列変換の定番パターン
  • 空要素除去: .filter(Boolean)

CSV 解析、URL パラメータの分解、タグ処理、ファイルパスの分解など、文字列を構造化データに変換するあらゆる場面で活躍します。