RegExp.prototype[@@split]()

[@@split]() メソッドは、文字列を部分文字列に区切ることによって、String オブジェクトを文字列の配列に分割します。

構文

regexp[Symbol.split](str[, limit])

引数

str
分割操作の対象。
limit

オプション。分割数の上限を指定する整数を渡す。[@@split]() メソッドは、分割項目の数が limit に一致するか、文字列が this パターンを満たさなくなるまで、this RegExp パターンに一致するすべてを分割します。

戻り値

要素として部分文字列を含む Array

説明

separator 引数が RegExp オブジェクトだった場合、このメソッドは String.prototype.split() の内部で呼び出されます。たとえば、次の 2 つの例は同じ結果を返します。

'a-b-c'.split(/-/);

/-/[Symbol.split]('a-b-c');

このメソッドは、RegExp のサブクラスで分割の振る舞いをカスタマイズするために存在します。

str 引数が RegExp オブジェクトではない場合、String.prototype.split() は、このメソッドを呼び出すことも RegExp オブジェクトを生成することもありません。

直接呼出し

this の扱いと引数の並び順を除いて、このメソッドは String.prototype.split() とほとんど同じように使用できます。

var re = /-/g;
var str = '2016-01-02';
var result = re[Symbol.split](str);
console.log(result);  // ["2016", "01", "02"]

サブクラスで @@split を使用する

既定の動作を修正するために、RegExp のサブクラスで [@@split]() メソッドをオーバーライドできます。

class MyRegExp extends RegExp {
  [Symbol.split](str, limit) {
    var result = RegExp.prototype[Symbol.split].call(this, str, limit);
    return result.map(x => "(" + x + ")");
  }
}

var re = new MyRegExp('-');
var str = '2016-01-02';
var result = str.split(re); // String.prototype.split calls re[@@split].
console.log(result); // ["(2016)", "(01)", "(02)"]

仕様

仕様 状態 コメント
ECMAScript 2015 (6th Edition, ECMA-262)
RegExp.prototype[@@split] の定義
標準 初期定義。
ECMAScript Latest Draft (ECMA-262)
RegExp.prototype[@@split] の定義
ドラフト  

ブラウザー実装状況

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

凡例

完全対応  
完全対応
未対応  
未対応

関連項目