Baseline Widely available
RegExp[Symbol.species]
ã¯éçãªã¢ã¯ã»ãµã¼ããããã£ã§ãç¹å®ã® RegExp
ã¡ã½ããã®ã³ãã¼ãããæ£è¦è¡¨ç¾ãæ§ç¯ããã®ã«ä½¿ç¨ãããã³ã³ã¹ãã©ã¯ã¿ã¼ãè¿ãã¾ãã
è¦å: [Symbol.species]
ãåå¨ããã¨ãä»»æã®ã³ã¼ãã®å®è¡ãå¯è½ã«ãªããã»ãã¥ãªãã£ä¸ã®èå¼±æ§ãçããå¯è½æ§ãããã¾ããã¾ããããç¨®ã®æé©åãé常ã«é£ãããªãã¾ããã¨ã³ã¸ã³ã®å®è£
è
ãã¡ã¯ããã®æ©è½ãåé¤ãããã©ãã調æ»ãã¦ãã¾ããå¯è½ã§ããã°ããã®æ©è½ã«é ¼ããã¨ã¯é¿ãã¦ãã ããã
class MyRegExp extends RegExp {
// Overwrite MyRegExp species to the parent RegExp constructor
static get [Symbol.species]() {
return RegExp;
}
}
const regex1 = new MyRegExp("foo", "g");
console.log(regex1.test("football"));
// Expected output: true
æ§æ è¿å¤
get [Symbol.species]
ãå¼ã³åºãããã³ã³ã¹ãã©ã¯ã¿ã¼ (this
) ã®å¤ããã®è¿å¤ã¯ãã³ãã¼ãã RegExp
ã¤ã³ã¹ã¿ã³ã¹ã使ããããã«ä½¿ç¨ããã¾ãã
[Symbol.species]
ã¢ã¯ã»ãµã¼ããããã£ã¯ã RegExp
ã®æ¢å®ã®ã³ã³ã¹ãã©ã¯ã¿ã¼ãè¿ãã¾ãããµãã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ã¼ã¯ããªã¼ãã¼ã©ã¤ããããã¨ã§ã³ã³ã¹ãã©ã¯ã¿ã¼ã®å²ãå½ã¦ã夿´ãããã¨ãã§ãã¾ããæ¢å®ã®å®è£
ã¯åºæ¬çã«æ¬¡ã®éãã§ãã
// 説æã®ããã®æ¶ç©ºã®åºç¤å®è£
class RegExp {
static get [Symbol.species]() {
return this;
}
}
ãã®å¤ç¸çãªå®è£
ã«ãããæ´¾çãããµãã¯ã©ã¹ã® Symbol.species
ãæ¢å®ã§ã³ã³ã¹ãã©ã¯ã¿ã¼èªèº«ãè¿ãããã«ãªãã¾ãã
class SubRegExp extends SubRegExp {}
SubRegExp[Symbol.species] === SubRegExp; // true
ä¸é¨ã® RegExp
ã¡ã½ããã¯ãexec()
ãå®è¡ããåã«ç¾å¨ã®æ£è¦è¡¨ç¾ã¤ã³ã¹ã¿ã³ã¹ã®ã³ãã¼ã使ãã¾ãããã®ãããlastIndex
ã¸ã®å¤æ´ãä¿æãããªããããªå¯ä½ç¨ãããã¾ããSymbol.species
ããããã£ã¯ãæ°ããã¤ã³ã¹ã¿ã³ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ã¼ã決å®ããããã«ä½¿ç¨ããã¾ããæ£è¦è¡¨ç¾ã¤ã³ã¹ã¿ã³ã¹ãã³ãã¼ããã¡ã½ããã¯ä»¥ä¸ã®éãã§ãã
Symbol.species
ããããã£ã¯ãæ¢å®ã®ã³ã³ã¹ãã©ã¯ã¿ã¼ãè¿ãã¾ãã RegExp
ãªãã¸ã§ã¯ãã§ããã°ã RegExp
ã³ã³ã¹ãã©ã¯ã¿ã¼ãè¿ãã¾ãã
RegExp[Symbol.species]; // function RegExp()
æ´¾çãªãã¸ã§ã¯ãã® species
æ´¾çã¯ã©ã¹ã®ã³ã¬ã¯ã·ã§ã³ãªãã¸ã§ã¯ãï¼ãã¨ãã°ãç¬èªã®æ£è¦è¡¨ç¾ã表ã MyRegExp
ï¼ã§ã¯ã MyRegExp
㮠species 㯠MyRegExp
ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ããããããæ´¾çã¯ã©ã¹ã®ã¡ã½ããã§è¦ªã§ãã RegExp
ãªãã¸ã§ã¯ããè¿ãããã«ããããªã¼ãã¼ã©ã¤ãããããªãããããã¾ããã
class MyRegExp extends RegExp {
// MyRegExp ã® species ã親ã§ãã RegExp ã³ã³ã¹ãã©ã¯ã¿ã¼ã«ãªã¼ãã¼ã©ã¤ããã¾ãã
static get [Symbol.species]() {
return RegExp;
}
}
ã¾ãã¯ãããã使ç¨ãã¦ã³ãã¼ããã»ã¹ãç£è¦ãããã¨ãã§ãã¾ãã
class MyRegExp extends RegExp {
constructor(...args) {
console.log("Creating a new MyRegExp instance with args:", args);
super(...args);
}
static get [Symbol.species]() {
console.log("Copying MyRegExp");
return this;
}
exec(value) {
console.log("Executing with lastIndex:", this.lastIndex);
return super.exec(value);
}
}
Array.from("aabbccdd".matchAll(new MyRegExp("[ac]", "g")));
// Creating a new MyRegExp instance with args: [ '[ac]', 'g' ]
// Copying MyRegExp
// Creating a new MyRegExp instance with args: [ MyRegExp /[ac]/g, 'g' ]
// Executing with lastIndex: 0
// Executing with lastIndex: 1
// Executing with lastIndex: 2
// Executing with lastIndex: 5
// Executing with lastIndex: 6
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ
å ±
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4