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"] |
複数文字の区切り文字
// 区切り文字は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"]
正規表現で分割する
区切りパターンが一定でない場合は、正規表現を使います。
// 連続スペースがあっても正しく分割
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"]
キャプチャグループ付きの正規表現
正規表現にキャプチャグループ () を含めると、区切り文字自体も結果の配列に含まれます。
// キャプチャなし: 区切り文字は除去される
console.log("a1b2c3d".split(/\d/));
// ["a", "b", "c", "d"]
// キャプチャあり: 区切り文字も配列に含まれる
console.log("a1b2c3d".split(/(\d)/));
// ["a", "1", "b", "2", "c", "3", "d"]
limit で分割数を制限する
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=3 なら配列の要素は最大 3 個で、4 番目以降の部分は捨てられます(他の言語では残りを最後の要素にまとめる仕様のものもあるため注意)。1 文字ずつ分割する方法の比較
| 方法 | コード | サロゲートペア対応 |
|---|---|---|
split("") |
"abc?".split("") |
× 壊れる(4要素) |
| スプレッド構文 | [..."abc?"] |
○ 正しい(4要素: a, b, c, ?) |
Array.from |
Array.from("abc?") |
○ 正しい |
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
split("") ではなく [...str] または Array.from(str) を使ってください。split と join の組み合わせ
split で分割 → 配列メソッドで加工 → join で結合するパターンは、文字列変換の定番テクニックです。
// split + join で全置換
const str = "2026-03-31";
console.log(str.split("-").join("/")); // "2026/03/31"
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 の結果に空文字 "" が含まれます。
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) は空文字 ""、null、undefined、0、false を除去します。0 や false を保持したい場合は filter(x => x !== "") を使ってください。実務でよく使うパターン
CSV の 1 行をオブジェクトに変換する
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 のクエリパラメータをオブジェクトに変換する
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" }
タグの一括処理
const input = "JavaScript, TypeScript, React, Node.js";
// カンマ+スペースで分割 → 前後の空白を除去
const tags = input.split(",").map(tag => tag.trim());
console.log(tags);
// ["JavaScript", "TypeScript", "React", "Node.js"]
ファイルパスの分解
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"
関連記事
- split で文字列を分割する方法(詳細版) — 正規表現・CSV 解析・実務パターン
- 文字列を結合する方法 — テンプレートリテラル・concat・join
- replace で文字列を置換する方法
- slice の使い方 — 文字列・配列の切り出し
- includes の使い方 — 文字列の存在チェック
- indexOf の使い方 — 文字列の位置検索
よくある質問
split("") は UTF-16 コードユニット単位で分割するため、サロゲートペア(絵文字)が 2 要素に分割されます。1 文字ずつ正しく分割するには [...str](スプレッド構文)または Array.from(str) を使ってください。.filter(Boolean) で空文字 "" を除去できます。ただし 0 や false も除去されるため、数値を含む配列では .filter(x => x !== "") を使いましょう。replaceAll(または split + join)。文字列を分割して配列として処理したいなら split。split("-").join("/") は replaceAll("-", "/") と同じ結果です。split("," , 2) のように残りを最後の要素にまとめる動作ではない点に注意してください。"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 パラメータの分解、タグ処理、ファイルパスの分解など、文字列を構造化データに変換するあらゆる場面で活躍します。