RegExp.escape()
Baseline
2025
æè¿å©ç¨å¯è½
2025å¹´5æä»¥éããã®æ©è½ã¯ææ°ã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã³ãã©ã¦ã¶ã¼ã§åä½ãã¾ããå¤ã端æ«ããã©ã¦ã¶ã¼ã§ã¯åä½ããªããã¨ãããã¾ãã
RegExp.escape() ã¯éçã¡ã½ããã§ãæååå
ã®æ½å¨çãªæ£è¦è¡¨ç¾æ§ææåãã¨ã¹ã±ã¼ããããªãã©ã«ãã¿ã¼ã³ã¨ã㦠RegExp() ã³ã³ã¹ãã©ã¯ã¿ã¼ã§å®å
¨ã«ä½¿ç¨ã§ããæ°ããæååãè¿ãã¾ãã
ã¦ã¼ã¶ã¼ãæä¾ããã³ã³ãã³ããå«ã RegExp ãåçã«ä½æããå ´åã¯ããã®é¢æ°ã使ç¨ãã¦å
¥åãç¡å®³åãããã¨ãæ¤è¨ãã¦ãã ããï¼å
¥åãå®éã«æ£è¦è¡¨ç¾æ§æãå«ãããã«æå³ããã¦ããå ´åãé¤ãï¼ãã¾ããä¾ãã°ã String.prototype.replaceAll() ã使ç¨ãã¦ããã¹ã¦ã®æ§ææåã®åã« \ ãæ¿å
¥ãããªã©ãã¦ããã®æ©è½ãåå®è£
ãããã¨ããªãã§ãã ããã RegExp.escape() ã¯ãæä½æ¥ã§ä½æããã³ã¼ãã§ã¯ããããéæã§ããªãã§ããããè¤æ°ã®ã¨ãã¸ã±ã¼ã¹/ã³ã³ããã¹ãã§åä½ããã¨ã¹ã±ã¼ãã·ã¼ã±ã³ã¹ã使ç¨ããããã«è¨è¨ããã¦ãã¾ãã
æ§æ
RegExp.escape(string)
弿°
string-
ã¨ã¹ã±ã¼ãããæååã§ãã
è¿å¤
RegExp() ã³ã³ã¹ãã©ã¯ã¿ã¼ã®ãªãã©ã«ãã¿ã¼ã³ã¨ãã¦å®å
¨ã«ä½¿ç¨ã§ããæ°ããæååãããªãã¡ãå
¥åæååå
ã®æ¬¡ã®ç½®ãæããè¡ããã¾ãã
- æååã®æåã®æåãã 10 鲿°ã®æ°åï¼0ï½9ï¼ã¾ã㯠ASCII æåï¼aï½zãAï½Zï¼ã§ããå ´åã
\xã®æåã¨ã¹ã±ã¼ãæ§æã使ç¨ãã¦ã¨ã¹ã±ã¼ãããã¾ããä¾ãã°ãRegExp.escape("foo")ã¯"\\x66oo"ãè¿ãã¾ãï¼ä»¥ä¸ãæååãªãã©ã«å ã® 2 ã¤ã®ããã¯ã¹ã©ãã·ã¥ã¯ãåä¸ã®ããã¯ã¹ã©ãã·ã¥æåã表ãã¾ãï¼ããã®æ®µéã§ã¯ããã®ã¨ã¹ã±ã¼ããããæååããç´åã«\1ã\x0ã\u000ãªã©ãç¶ã大ããªãã¿ã¼ã³ã«åãè¾¼ã¾ããå ´åãå é ã®æåãã¨ã¹ã±ã¼ãã·ã¼ã±ã³ã¹ã®ä¸é¨ã¨ãã¦è§£éãããªãããã«ä¿è¨¼ãã¾ãã - æ£è¦è¡¨ç¾ã®æ§ææåï¼
^,$,\,.,*,+,?,(,),[,],{,},|, ããã³åºåãæåã®/ï¼ã¯ãåã«\æåãæ¿å ¥ãããã¨ã§ã¨ã¹ã±ã¼ãããã¾ããä¾ãã°ãRegExp.escape("foo.bar")ã¯"\\x66oo\\.bar"ãè¿ããRegExp.escape("(foo)")ã¯"\\(foo\\)"ãè¿ãã¾ãã - ä»ã®åºåãè¨å·ï¼
,,-,=,<,>,#,&,!,%,:,;,@,~,',`,"ãªã©ï¼ã¯ã\xæ§æã使ç¨ãã¦ã¨ã¹ã±ã¼ãããã¾ããä¾ãã°ãRegExp.escape("foo-bar")ã¯"\\x66oo\\x2dbar"ãè¿ãã¾ãããããã®æåã¯ãä¾ãã°/foo\-bar/uã¯æ§æã¨ã©ã¼ã¨ãªãããã\ã®æ¥é è¾ãä»ãããã¨ã§ã¨ã¹ã±ã¼ããããã¨ã¯ã§ãã¾ããã - åºæã®æåã¨ã¹ã±ã¼ãã·ã¼ã±ã³ã¹ãããæåã
\f(U+000C FORM FEED),\n(U+000A LINE FEED),\r(U+000D CARRIAGE RETURN),\t(U+0009 CHARACTER TABULATION),\v(U+000B LINE TABULATION) ã¯ããã®ã¨ã¹ã±ã¼ãã·ã¼ã±ã³ã¹ã«ç½®ããããã¾ããä¾ãã°ãRegExp.escape("foo\nbar")ã¯"\\x66oo\\nbar"ãè¿ãã¾ãã - ç©ºç½æåã¯
"\\x20"ã¨ãã¦ã¨ã¹ã±ã¼ãããã¾ãã - ãã®ä»ã®é ASCII ã®æ¹è¡ããã³ãã¯ã¤ãã¹ãã¼ã¹æåã¯ã UTF-16 ã³ã¼ãåä½ã表ã 1ï½2 ä»¶ã®
\uXXXXã¨ã¹ã±ã¼ãã·ã¼ã±ã³ã¹ã«ç½®ãæãããã¾ããä¾ãã°ãRegExp.escape("foo\u2028bar")ã¯"\\x66oo\\u2028bar"ãè¿ãã¾ãã - å¤ç«ãµãã²ã¼ãã¯ããã®
\uXXXXã¨ã¹ã±ã¼ãã·ã¼ã±ã³ã¹ã«ç½®ãæãããã¾ããä¾ãã°ãRegExp.escape("foo\uD800bar")ã¯"\\x66oo\\ud800bar"ãè¿ãã¾ãã
ä¾å¤
TypeError-
stringãæååã§ã¯ãªãå ´åã«çºçãã¾ãã
ä¾
>RegExp.escape() ã®ä½¿ç¨
次ã®ä¾ã¯ãRegExp.escape() ã¡ã½ããã®ãã¾ãã¾ãªå
¥åã¨åºåã示ãã¦ãã¾ãã
RegExp.escape("Buy it. use it. break it. fix it.");
// "\\x42uy\\x20it\\.\\x20use\\x20it\\.\\x20break\\x20it\\.\\x20fix\\x20it\\."
RegExp.escape("foo.bar"); // "\\x66oo\\.bar"
RegExp.escape("foo-bar"); // "\\x66oo\\x2dbar"
RegExp.escape("foo\nbar"); // "\\x66oo\\nbar"
RegExp.escape("foo\uD800bar"); // "\\x66oo\\ud800bar"
RegExp.escape("foo\u2028bar"); // "\\x66oo\\u2028bar"
RegExp.escape() 㨠RegExp ã³ã³ã¹ãã©ã¯ã¿ã¼ã®ä½¿ç¨
RegExp.escape() ã®ä¸»ãªä½¿ç¨ä¾ã¯ãæååããã大ããªæ£è¦è¡¨ç¾ãã¿ã¼ã³ã«åãè¾¼ã¿ããã®æååãæ£è¦è¡¨ç¾ã®æ§æã§ã¯ãªããªãã©ã«ãã¿ã¼ã³ã¨ãã¦ç¢ºå®ã«ä¿æãããå ´åã§ããURL ãç½®æããæ¬¡ã®åç´ãªä¾ãèãã¦ã¿ã¾ãããã
function removeDomain(text, domain) {
return text.replace(new RegExp(`https?://${domain}(?=/)`, "g"), "");
}
const input =
"Consider using [RegExp.escape()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/RegExp/escape) to escape special characters in a string.";
const domain = "developer.mozilla.org";
console.log(removeDomain(input, domain));
// Consider using [RegExp.escape()](/ja/docs/Web/JavaScript/Reference/Global_Objects/RegExp/escape) to escape special characters in a string.
ä¸è¨ã® domain ãæ¿å
¥ããã¨ãæ£è¦è¡¨ç¾ãªãã©ã« https?://developer.mozilla.org(?=/) ã¨ãªãã¾ããããã§ã "." æåã¯æ£è¦è¡¨ç¾ã®ã¯ã¤ã«ãã«ã¼ãæåã§ããããã¯ãæååã "." ã®ä»£ããã«ä½ãæåãæã¤æååã¨ä¸è´ãããã¨ãæå³ãã¦ãããä¾ãã°ã developer-mozilla-org ãªã©ã該å½ãã¾ãããããã£ã¦ã次ã®ããã¹ãã誤ã£ã¦å¤æ´ããã¦ãã¾ãã¾ãã
const input =
"This is not an MDN link: https://developer-mozilla.org/, be careful!";
const domain = "developer.mozilla.org";
console.log(removeDomain(input, domain));
// This is not an MDN link: /, be careful!
ãããä¿®æ£ããã«ã¯ã RegExp.escape() ã使ç¨ãã¦ãã¦ã¼ã¶ã¼å
¥åã確å®ã«ãªãã©ã«ãã¿ã¼ã³ã¨ãã¦æ±ãããããã«ãã¾ãã
function removeDomain(text, domain) {
return text.replace(
new RegExp(`https?://${RegExp.escape(domain)}(?=/)`, "g"),
"",
);
}
ããã§ãã®é¢æ°ã¯æå³éãã«åä½ãã developer-mozilla.org ã® URL ã夿ããªããªãã¾ãã
仿§æ¸
| 仿§æ¸ |
|---|
| ECMAScript® 2027 Language Specification > # sec-regexp.escape > |