RegExp.prototype[@@split]()

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

構文

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

引数

str
分割操作の対象。
limit Optional

検出される分割数の制限を指定する整数。 [@@split]() メソッドは、 this RegExp パターン (または上記の構文では regexp) に一致するたびに、分割項目の数が limit と一致するか、文字列が this パターンを満たなくなるまで、分割を行います。

返値

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

解説

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

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

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

このメソッドは、RegExp のサブクラスで split() の動作をカスタマイズするために存在します。

直接呼出し

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

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

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

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

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

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

仕様書

仕様書
ECMAScript (ECMA-262)
RegExp.prototype[@@split] の定義

ブラウザーの互換性

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

凡例

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

関連情報