Baseline Widely available
[Symbol.replace]()
㯠RegExp
ã¤ã³ã¹ã¿ã³ã¹ã®ã¡ã½ããã§ãæ£è¦è¡¨ç¾ããã¿ã¼ã³ã¨ãã¦æ¸¡ãããã¨ãã« String.prototype.replace()
ããã³String.prototype.replaceAll()
ãã©ã®ããã«åä½ããããæå®ãã¾ãã
class RegExp1 extends RegExp {
[Symbol.replace](str) {
return RegExp.prototype[Symbol.replace].call(this, str, "#!@?");
}
}
console.log("football".replace(new RegExp1("foo")));
// Expected output: "#!@?tball"
æ§æ
regexp[Symbol.replace](str, replacement)
弿°
str
ç½®æã®å¯¾è±¡ã¨ãªãæåå (String
) ã§ãã
replacement
æååã¾ãã¯é¢æ°ãåããã¨ãã§ãã¾ãã
String.prototype.replace
ãã¼ã¸ã®ç½®ææååã¨ãã¦ã®æååã®æå®ã®ç¯ãåç
§ãã¦ãã ãããString.prototype.replace
ãã¼ã¸ã®ç½®ææååã¨ãã¦ã®é¢æ°ã®æå®ã§è¨è¿°ããã¦ãã¾ããä¸é¨ã¾ãã¯ãã¹ã¦ã®ãã¿ã¼ã³ã®ä¸è´ç®æãç½®æå 容ã«ãã£ã¦ç½®ãæããããæ°ããæååã§ãã
解説ãã®ã¡ã½ãã㯠String.prototype.replace()
ã®ä¸ã§ã pattern
弿°ã RegExp
ãªãã¸ã§ã¯ãã§ãã£ãå ´åã«å
é¨çã«å¼ã³åºããã¾ãããã¨ãã°ã次㮠2 ã¤ã®ä¾ã¯åãçµæãè¿ãã¾ãã
"abc".replace(/a/, "A");
/a/[Symbol.replace]("abc", "A");
æ£è¦è¡¨ç¾ãã°ãã¼ãã«ï¼g
ãã©ã°ä»ãï¼ã§ããå ´åãæ£è¦è¡¨ç¾ã® exec()
ã¡ã½ãã㯠exec()
ã null
ãè¿ãã¾ã§ç¹°ãè¿ãå¼ã³åºããã¾ããããã§ãªãå ´åãexec()
ã¯ä¸åº¦ã ãå¼ã³åºããã¾ããããããã® exec()
ã®çµæã«å¯¾ãã¦ã String.prototype.replace()
ã®è§£èª¬ã«åºã¥ãã¦ç½®ãæããæºåããã¾ãã
[Symbol.replace]()
㯠exec()
ã null
ãè¿ãã¾ã§å¼ã³ç¶ããæå¾ã®ç
§åã«å¤±æããã¨èªåçã«æ£è¦è¡¨ç¾ã® lastIndex
ã 0 ã«ãªã»ããããã®ã§ã[Symbol.replace]()
ãçµäºãã¦ãé常ã¯å¯ä½ç¨ãããã¾ãããããããæ£è¦è¡¨ç¾ãç²ççãã¤ã°ãã¼ãã«ã§ã¯ãªãå ´åãlastIndex
ã¯ãªã»ããããã¾ããããã®å ´åãreplace()
ãå¼ã³åºããã³ã«ç°ãªãçµæãè¿ãå¯è½æ§ãããã¾ãã
const re = /a/y;
for (let i = 0; i < 5; i++) {
console.log("aaa".replace(re, "b"), re.lastIndex);
}
// baa 1
// aba 2
// aab 3
// aaa 0
// baa 1
æ£è¦è¡¨ç¾ãç²ççã§ã°ãã¼ãã«ãªå ´åãç²ççã«ç
§åãã¾ããããªãã¡ã lastIndex
以éã®åºç¾ã«ã¯ä¸è´ãã¾ããã
console.log("aa-a".replace(/a/gy, "b")); // "bb-a"
ããç¾å¨ã®ä¸è´ã空æååã§ãã£ãã¨ãã¦ãã lastIndex
ã¯é²ã¿ã¾ããæ£è¦è¡¨ç¾ã Unicode 対å¿ã§ããã°ãUnicode ã³ã¼ããã¤ã³ãã 1 ã¤é²ã¿ã¾ããããã§ãªãå ´åã¯ã UTF-16 ã³ã¼ãåä½ 1 ã¤åé²ã¿ã¾ãã
console.log("ð".replace(/(?:)/g, " ")); // " \ud83d \ude04 "
console.log("ð".replace(/(?:)/gu, " ")); // " ð "
ãã®ã¡ã½ããã¯ã RegExp
ãµãã¯ã©ã¹ã®ç½®æåä½ãã«ã¹ã¿ãã¤ãºããããã«åå¨ãã¦ãã¾ãã
this
ã¨å¼æ°ã®é åºãç°ãªãç¹ãé¤ãã¦ããã®ã¡ã½ãã㯠String.prototype.replace()
ã¨ã»ã¨ãã©åãä½¿ãæ¹ãã§ãã¾ãã
const re = /-/g;
const str = "2016-01-01";
const newstr = re[Symbol.replace](str, ".");
console.log(newstr); // 2016.01.01
ãµãã¯ã©ã¹ã§ã® [Symbol.replace]()
ã®ä½¿ç¨
æ¢å®ã®åä½ãä¿®æ£ããããã«ãRegExp
ã®ãµãã¯ã©ã¹ã§ [Symbol.replace]()
ã¡ã½ããããªã¼ãã¼ã©ã¤ãã§ãã¾ãã
class MyRegExp extends RegExp {
constructor(pattern, flags, count) {
super(pattern, flags);
this.count = count;
}
[Symbol.replace](str, replacement) {
// [Symbol.replace]() ã `count` åå®è¡ãã
let result = str;
for (let i = 0; i < this.count; i++) {
result = RegExp.prototype[Symbol.replace].call(this, result, replacement);
}
return result;
}
}
const re = new MyRegExp("\\d", "", 3);
const str = "01234567";
const newstr = str.replace(re, "#"); // String.prototype.replace 㯠re[Symbol.replace]() ãå¼ã³åºã
console.log(newstr); // ###34567
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ
å ±
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