String.prototype.split()

split() メソッドは、指定した separator 文字列を使って分割する箇所を決定し、文字列を複数の部分文字列に区切ることにより String オブジェクトを文字列の配列に分割します。

構文

str.split([separator[, limit]])

注意: 空文字列 ("") を separator として使った場合、文字列はユーザー認識文字 書記素クラスタ)や Unicode 文字(コードポイント)ごとに分割されず、UTF-16 コードユニットごとに分割されます。この挙動はサロゲートペアを破壊します。stackoverflow 内の How do you get a string to a character array in JavaScript? を参照してください。

引数

separator Optional
文字列を区切ることに使用するための文字を指定します。separator は文字列、もしくは正規表現として扱われます。separator が複数の文字を含んだ文字列の場合、 その文字列全体が分割点として表さなければなりません。 separator が省略された場合、返される配列は文字列全体から成る 1 つの要素を含みます。separator が空文字の場合、strstr の各文字に対して 1 つの要素を含んだ配列に変換されます。
limit Optional
見つかった分割結果の数の制限を指定する整数です。split() メソッドは、分割した項目数が limit に一致するか、文字列が separator に不足するまで、すべての separator のマッチを分割します。指定された制限より先に文字列の末尾に到達した場合、返される配列は limit より少ない長さかもしれません。残ったテキストは新しい配列に代入されません。

戻り値

与えられた文字列で separator が発生するそれぞれの箇所で分割した文字列の配列です。

詳細

split メソッドが新しい配列を文字列から取り出すとき、separator は文字列から削除され、部分文字列から成る配列が返ります。separator が省略された場合、その配列は 文字列全体から成る 1 つの要素を含みます。separator が文字列の最初または最後、あるいは両方に現れた場合、それぞれ、配列の最初、最後、その両方が空の文字列になります。よって、文字列が separator の一つのインスタンスだけで構成されている場合、二つの空の文字列を含んだ配列が返されます。

separator が、キャプチャする括弧を含む正規表現だった場合、マッチしたキャプチャする括弧の結果(任意の undefined となった結果を含む)である各回の区切りが出力配列に結合されます。

註: separator が配列であるとき、それは文字列に変換された上で separator として使われます。
註: 文字列が空であるとき、split メソッドは、空の配列ではなく、1 つの空文字列を含む配列を返します。文字列と separator が両方とも空の文字列の場合、空の文字列が返されます。

split メソッドの使用

以下の例は、指定された区切りを使って、文字列を文字列の配列に分割する関数を定義します。文字列を分割した後、その関数は元の文字列(分割する前)、使用した区切り、配列中の要素の数、そして、個々の配列要素を示すメッセージを表示します。

function splitString(stringToSplit, separator) {
 var arrayOfStrings = stringToSplit.split(separator);

 console.log('元の文字列: "' + stringToSplit + '"');
 console.log('区切り: "' + separator + '"');
 console.log('配列は ' + arrayOfStrings.length + ' 要素: ' + arrayOfStrings.join(' / '));
}

var tempestString = 'Oh brave new world that has such people in it.';
var monthString = 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec';

var space = ' ';
var comma = ',';

splitString(tempestString, space);
splitString(tempestString);
splitString(monthString, comma);

これは次のように出力されます。

元の文字列: "Oh brave new world that has such people in it."
区切り: " "
配列は 10 要素: Oh / brave / new / world / that / has / such / people / in / it.

元の文字列: "Oh brave new world that has such people in it."
区切り: "undefined"
配列は 1 要素: Oh brave new world that has such people in it.

元の文字列: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec"
区切り: ","
配列は 12 要素: Jan / Feb / Mar / Apr / May / Jun / Jul / Aug / Sep / Oct / Nov / Dec

文字列からの空白の削除

以下の例では、split() は、0 回以上の空白とそれに続くセミコロン、それにさらに続く 0 回以上の空白を探し、それらが見つかったとき、文字列から空白を削除します。nameList は、split() の結果として返された配列です。

var names = 'Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand ';

console.log(names);

var re = /\s*(?:;|$)\s*/;
var nameList = names.split(re);

console.log(nameList);

これは 2 つの行を出力します。1 行目は元の文字列を出力し、2 行目は split メソッドの実行結果の配列を出力します。

Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand
[ "Harry Trump", "Fred Barney", "Helen Rigby", "Bill Abel", "Chris Hand", "" ]

限られた数の分割結果を返す

以下の例では、split() は 文字列中の 0 回以上の空白を探し、見つかった最初の 3 つの分割結果を返します。

var myString = 'Hello World. How are you doing?';
var splits = myString.split(' ', 3);

console.log(splits);

このスクリプトは以下の例を出力します。

["Hello", "World.", "How"]

RegExp でキャプチャした結果を分割した配列に含める

separator がキャプチャする括弧を含んだ正規表現の場合、マッチした結果が戻り値の配列に含まれます。

var myString = 'Hello 1 word. Sentence number 2.';
var splits = myString.split(/(\d)/);

console.log(splits);

このスクリプトは、以下を表示します。

[ "Hello ", "1", " word. Sentence number ", "2", "." ]

配列を separator として分割する

var myString = 'this|is|a|Test';
var splits = myString.split(['|']);

console.log(splits); //["this", "is", "a", "Test"]

var myString = 'ca,bc,a,bca,bca,bc';

var splits = myString.split(['a','b']); 
// myString.split(['a','b']) is same as myString.split(String(['a','b'])) 

console.log(splits);  //["c", "c,", "c", "c", "c"]

split() を使って文字列を反転させる

この手法は文字列を正しく反転できるとは限りません。

var str = 'asdfghjkl';
var strReverse = str.split('').reverse().join(''); // 'lkjhgfdsa'
// split() returns an array on which reverse() and join() can be applied

Unicode対応の分割を使用している場合でも、文字列に書記素クラスタが含まれていると機能しません(代わりに esrever などを使ってください)。

var str = 'résumé';
var strReverse = str.split(/(?:)/u).reverse().join('');
// => "́emuśer"

ボーナス: オリジナルの文字列が回分の場合、テストのために === 演算子を使用します。

仕様

仕様 ステータス コメント
ECMAScript 3rd Edition (ECMA-262) 標準 初期定義。JavaScript 1.1 で実装。
ECMAScript 5.1 (ECMA-262)
String.prototype.split の定義
標準  
ECMAScript 2015 (6th Edition, ECMA-262)
String.prototype.split の定義
標準  
ECMAScript Latest Draft (ECMA-262)
String.prototype.split の定義
ドラフト  

ブラウザー実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
splitChrome 完全対応 ありEdge 完全対応 12Firefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり

凡例

完全対応  
完全対応

関連項目