RegExp.prototype[Symbol.split]()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2020å¹´1æ.
[Symbol.split]() 㯠RegExp ã¤ã³ã¹ã¿ã³ã¹ã®ã¡ã½ããã§ã String.prototype.split ã«ã»ãã¬ã¼ã¿ã¼ã¨ãã¦æ£è¦è¡¨ç¾ã渡ãããã¨ãã«ã©ã®ããã«åä½ããã®ããæå®ãã¾ãã
試ãã¦ã¿ã¾ããã
class RegExp1 extends RegExp {
[Symbol.split](str, limit) {
const result = RegExp.prototype[Symbol.split].call(this, str, limit);
return result.map((x) => `(${x})`);
}
}
console.log("2016-01-02".split(new RegExp1("-")));
// äºæ³ãããçµæ: Array ["(2016)", "(01)", "(02)"]
console.log("2016-01-02".split(/-/));
// äºæ³ãããçµæ: Array ["2016", "01", "02"]
æ§æ
regexp[Symbol.split](str)
regexp[Symbol.split](str, limit)
弿°
str-
å岿ä½ã®å¯¾è±¡ã
limitçç¥å¯-
æ¤åºãããå岿°ã®å¶éãæå®ããæ´æ°ã
[Symbol.split]()ã¡ã½ããã¯ãthisRegExp ãã¿ã¼ã³ (ã¾ãã¯ä¸è¨ã®æ§æã§ã¯regexp) ã«ä¸è´ãããã³ã«ãåå²é ç®ã®æ°ãlimitã¨ä¸è´ããããæååãthisãã¿ã¼ã³ãæºããªããªãã¾ã§ãåå²ãè¡ãã¾ãã
è¿å¤
è¦ç´ ã¨ãã¦é¨åæååãå«ãé
å (Array)ã
解説
ãã®ã¡ã½ãã㯠String.prototype.split() ã«ããã¦ãRegExp ãã»ãã¬ã¼ã¿ã¼ã¨ãã¦æ¸¡ãããå ´åã«å
é¨çã«å¼ã³åºããã¾ãããã¨ãã°ã次㮠2 ã¤ã®ä¾ã¯åãçµæãè¿ãã¾ãã
"a-b-c".split(/-/);
/-/[Symbol.split]("a-b-c");
ãã®ã¡ã½ããã¯ãRegExp ã®ãµãã¯ã©ã¹ã§ split() ã®åä½ãã«ã¹ã¿ãã¤ãºããããã«åå¨ãã¾ãã
RegExp.prototype[Symbol.split]() ãã¼ã¹ã¡ã½ããã¯ã次ã®ããã«åä½ãã¾ãã
[Symbol.species]ã使ç¨ãã¦æ°ããæ£è¦è¡¨ç¾ãæ§ç¯ããå ã®æ£è¦è¡¨ç¾ã夿´ããå 容ã«ããã¨ããããå§ã¾ãã¾ãã- æ£è¦è¡¨ç¾ã®
gï¼ãã°ãã¼ãã«ãï¼ãã©ã°ã¯ç¡è¦ãããyï¼ãç²ççãï¼ãã©ã°ã¯å ã 表示ããã¦ããªãå ´åã§ã常ã«é©ç¨ããã¾ãã - 対象ã¨ããæååã空ã§ãæ£è¦è¡¨ç¾ã空æååã«ä¸è´ããå ´åï¼ä¾ãã°
/a?/ï¼ã¯ã空ã®é åãè¿ãã¾ããããã§ãªãå ´åãæ£è¦è¡¨ç¾ã空æååã«ä¸è´ããªããã°[""]ãè¿ãã¾ãã - ç
§åã¯
this.exec()ãé£ç¶ãã¦å¼ã³åºããã¨ã§è¡ããã¾ããæ£è¦è¡¨ç¾ã¯å¸¸ã«ç²ççãªã®ã§ãæååã«æ²¿ã£ã¦ç§»åãããã®åº¦ã«ä¸è´ããæååãã¤ã³ããã¯ã¹ããã£ããã£ã°ã«ã¼ããå¾ããã¾ãã - ä¸è´ãããã¨ã«ãæå¾ã«ä¸è´ããæååã®çµããã¨ãç¾å¨ä¸è´ããæååã®å§ãã®éã®é¨åæååããæåã®é åã«è¿½å ããã¾ãããã®å¾ããã£ããã£ã°ã«ã¼ãã®å¤ã 1 ã¤ãã¤è¿½å ããã¾ãã
- ç¾å¨ä¸è´ãã¦ããæååã空æååã§ãã£ãããæ£è¦è¡¨ç¾ãç¾å¨ã®ä½ç½®ã§ä¸è´ããªãã£ããããå ´åï¼ç²ççãªã®ã§ï¼ã
lastIndexãé²ãããã¾ããæ£è¦è¡¨ç¾ã Unicode 対å¿ã§ããã°ãUnicode ã³ã¼ããã¤ã³ãåé²ã¿ã¾ããããã§ãªããã°ã UTF-16 ã³ã¼ãåä½ 1 ã¤åé²ã¿ã¾ãã - æ£è¦è¡¨ç¾ãå¯¾è±¡ã®æååã¨ä¸è´ããªãå ´åã¯ãå¯¾è±¡ã®æååãé åã§å²ãã§ãã®ã¾ã¾è¿ãã¾ãã
- è¿ãããé
åã®é·ãã¯ãæå®ãããå ´åã¯
limit弿°ãè¶ ãããã¨ã¯ããã¾ããããã®ãããé åãæ¢ã«åã¾ã£ã¦ããå ´åãæå¾ã®ä¸è´ããã°ã«ã¼ãã¨ãã®ãã£ããã£ã°ã«ã¼ãããã¹ã¦è¿ãé åã«åå¨ããã¨ã¯éãã¾ããã
ä¾
>ç´æ¥å¼åºã
this ã®æ±ãã¨å¼æ°ã®ä¸¦ã³é ãé¤ãã¦ããã®ã¡ã½ãã㯠String.prototype.split() ã¨ã»ã¨ãã©åãããã«ä½¿ç¨ã§ãã¾ãã
const re = /-/g;
const str = "2016-01-02";
const result = re[Symbol.split](str);
console.log(result); // ["2016", "01", "02"]
ãµãã¯ã©ã¹ã§ [Symbol.split]() ã使ç¨ãã
æ¢å®ã®åä½ãä¿®æ£ããããã«ãRegExp ã®ãµãã¯ã©ã¹ã§ [Symbol.split]() ã¡ã½ããããªã¼ãã¼ã©ã¤ãã§ãã¾ãã
class MyRegExp extends RegExp {
[Symbol.split](str, limit) {
const result = RegExp.prototype[Symbol.split].call(this, str, limit);
return result.map((x) => `(${x})`);
}
}
const re = new MyRegExp("-");
const str = "2016-01-02";
const result = str.split(re); // String.prototype.split 㯠re[Symbol.split]() ãå¼ã³åºã
console.log(result); // ["(2016)", "(01)", "(02)"]
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-regexp.prototype-%symbol.split%> |