String.prototype.replace()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2015å¹´7æ.
replace() 㯠String å¤ã®ã¡ã½ããã§ãpattern ã«ä¸è´ããæååã®ä¸é¨ã¾ãã¯ãã¹ã¦ã replacement ã§ç½®ãæããæ°ããæååãè¿ãã¾ããpattern ã«ã¯æååã¾ãã¯æ£è¦è¡¨ç¾ (RegExp) ãæå®ãããã¨ãã§ãã replacement ã«ã¯æååã¾ãã¯ä¸è´ãããã¨ã«å¼ã³åºããã颿°ãæå®ãããã¨ãã§ãã¾ããpattern ãæååã®å ´åãæåã«ä¸è´ããç®æã®ã¿ãç½®ãæãã¾ããå
ã®æååã¯å¤æ´ããã¾ããã
試ãã¦ã¿ã¾ããã
const paragraph = "I think Ruth's dog is cuter than your dog!";
console.log(paragraph.replace("Ruth's", "my"));
// äºæ³ãããçµæ: "I think my dog is cuter than your dog!"
const regex = /Dog/i;
console.log(paragraph.replace(regex, "ferret"));
// äºæ³ãããçµæ: "I think Ruth's ferret is cuter than your dog!"
æ§æ
replace(pattern, replacement)
弿°
pattern-
æååã¾ãã¯
Symbol.replaceã¡ã½ãããæã¤ãªãã¸ã§ã¯ããç½®ããã¨ãã§ãã¾ããå ¸åçãªä¾ã¯æ£è¦è¡¨ç¾ã§ããSymbol.replaceã¡ã½ãããæããªãå¤ã¯æååã«å¤æããã¾ãã replacement-
æååã¾ãã¯é¢æ°ã§ãã
- æååã®å ´åã
patternã«ä¸è´ããé¨åæååãç½®ãæãã¾ããæ°ã ã®ç¹å¥ãªç½®æãã¿ã¼ã³ã«å¯¾å¿ãã¦ãã¾ããä¸è¨ã®ãç½®ææååã¨ãã¦ã®æååã®æå®ãã®ç¯ãåç §ãã¦ãã ããã - 颿°ã®å ´åãä¸è´ãããã¨ã«å¼ã³åºããããã®è¿å¤ãç½®ãæããããã¹ãã¨ãã¦ä½¿ç¨ããã¾ãããã®é¢æ°ã«æ¸¡ããã弿°ã¯ä¸è¨ã®ãç½®ææååã¨ãã¦ã®é¢æ°ã®æå®ãã§è¿°ã¹ããã¦ãã¾ãã
- æååã®å ´åã
è¿å¤
ãã¿ã¼ã³ã® 1 ã¤ãããã¤ããã¾ãã¯ãã¹ã¦ã®ä¸è´ãæå®ããç½®æã§ç½®ãæããæ°ããæååã§ãã
解説
ãã®ã¡ã½ããã¯ããããå¼ã³åºããæååãå¤åããã¾ãããè¿å¤ã¨ãã¦æ°ããæååãè¿ãã¾ãã
æååãã¿ã¼ã³ã¯ä¸åº¦ã ãç½®æããã¾ãã ã°ãã¼ãã«ãªæ¤ç´¢ã¨ç½®æãè¡ãã«ã¯ãæ£è¦è¡¨ç¾ã g ãã©ã°ã§ä½¿ç¨ãããã代ããã« replaceAll() ã使ç¨ãã¦ãã ããã
pattern ã Symbol.replace ã¡ã½ãããæã¤ãªãã¸ã§ã¯ãï¼RegExp ãªãã¸ã§ã¯ããå«ãï¼ã§ããå ´åããã®ã¡ã½ããã¯ã¿ã¼ã²ããæåå㨠replacement ã弿°ã¨ãã¦å¼ã³åºããã¾ãããã®è¿å¤ã¯ replace() ã®è¿å¤ã¨ãªãã¾ãããã®å ´åãreplace() ã®åä½ã¯å®å
¨ã« [Symbol.replace]() ã¡ã½ããã«ãã£ã¦ã¨ã³ã³ã¼ãããã¾ããä¾ãã°ã以ä¸ã®èª¬æã§ãã°ã«ã¼ãããã£ããã£ãããã¨æ¸ããã¦ãããã®ã¯ãå®éã«ã¯ RegExp.prototype[Symbol.replace]() ã«ãã£ã¦æä¾ãããæ©è½ã§ãã
pattern ã空æååã®å ´åãæååã®å§ãã«ã¯ç½®æå¾ã®æååãç½®ããã¾ãã
"xxx".replace("", "_"); // "_xxx"
g ãã©ã°ãæã¤æ£è¦è¡¨ç¾ã¯ã replace() ãè¤æ°åç½®æããå¯ä¸ã®ã±ã¼ã¹ã§ããæ£è¦è¡¨ç¾ããããã£ï¼ç¹ã« sticky ãã©ã°ï¼ã¨ replace() ã®ç¸äºä½ç¨ã«ã¤ãã¦ã¯ãRegExp.prototype[Symbol.replace]() ãåç
§ãã¦ãã ããã
ç½®ææååã¨ãã¦ã®æååã®æå®
ç½®ææååã«ã¯ä»¥ä¸ã®ç¹æ®ãªç½®æãã¿ã¼ã³ãå ¥ãããã¨ãã§ãã¾ãã
| ãã¿ã¼ã³ | å°å ¥ |
|---|---|
$$ |
"$" ãæ¿å
¥ãã¾ãã |
$& |
ä¸è´ããé¨åæååãæ¿å ¥ãã¾ãã |
$` |
ä¸è´ããé¨åæååã®ç´åã®æååã®é¨åãæ¿å ¥ãã¾ãã |
$' |
ä¸è´ããé¨åæååã®ç´å¾ã®æååã®é¨åãæ¿å ¥ãã¾ãã |
$n |
n çªç®ï¼1 åºç¹ï¼ã«ãã£ããã£ãããæååãæ¿å
¥ãã¾ããn 㯠100 æªæºã®æ£ã®æ´æ°ã§ãã |
$<Name> |
Name ã¯ã°ã«ã¼ãåã§ãæå®ãããååã®ãã£ããã£ã°ã«ã¼ããæ¿å
¥ãã¾ãã |
$n 㨠$<Name> 㯠pattern 弿°ã RegExp ãªãã¸ã§ã¯ãã§ããå ´åã«ã®ã¿å©ç¨ã§ãã¾ããpattern ãæååã§ãã£ãå ´åãã¾ãã¯å¯¾å¿ãããã£ããã£ã°ã«ã¼ããæ£è¦è¡¨ç¾ã«åå¨ããªãã£ãå ´åããã¿ã¼ã³ã¯ãªãã©ã«ã¨ãã¦ç½®ãæãããã¾ããã°ã«ã¼ããåå¨ãã¦ãããã®ã®ãä¸è´ããªãã£ãå ´åï¼è«çåã®ä¸é¨ã§ãã£ãå ´åãªã©ï¼ã¯ã空æååã«ç½®ãæãããã¾ãã
"foo".replace(/(f)/, "$2");
// "$2oo" ã¨ãªããæ£è¦è¡¨ç¾ã« 2 çªç®ã®ã°ã«ã¼ãããªãããã
"foo".replace("f", "$1");
// "$1oo" ã¨ãªãããã¿ã¼ã³ãæååã§ãããã°ã«ã¼ããæããªãããã
"foo".replace(/(f)|(g)/, "$2");
// "oo" ã¨ãªãã2 çªç®ã®ã°ã«ã¼ããåå¨ãããã®ã®ãä¸è´ãããã®ããªãããã
ç½®ææååã¨ãã¦ã®é¢æ°ã®æå®
第 2 弿°ã¨ãã¦é¢æ°ãæå®ãããã¨ãã§ãã¾ãããã®å ´åã颿°ã¯ç §åãè¡ãããå¾ã«å®è¡ããã¾ãã颿°å¼ã³åºãã®çµæï¼è¿å¤ï¼ããç½®ææååã¨ãã¦ä½¿ããã¾ã
ã¡ã¢: ä¸è¨ã®ç¹æ®ãªç½®ãæããã¿ã¼ã³ã¯ãç½®ãæã颿°ããè¿ãããæååã«ã¯é©ç¨ããã¾ããã
颿°ã®å½¢å¼ã¯æ¬¡ã®éãã§ãã
function replacer(match, p1, p2, /* â¦, */ pN, offset, string, groups) {
return replacement;
}
颿°ã«ä¸ãããã弿°ã¯æ¬¡ã®éãã§ãã
match-
ä¸è´ããé¨åæååï¼ä¸è¨ã®
$&ã«å¯¾å¿ï¼ã§ãã p1,p2, â¦,pN-
ãã£ããã£ã°ã«ã¼ãï¼ååä»ããã£ããã£ã°ã«ã¼ããå«ãï¼ã§è¦ã¤ãã£ã
nçªç®ã®æååã§ãreplace()ã®ç¬¬ä¸å¼æ°ãRegExpãªãã¸ã§ã¯ãã ã£ãå ´åã«æä¾ããããã®ã§ããï¼ä¸è¨ã®$1,$2, ãªã©ã«å¯¾å¿ãã¾ããï¼ä¾ãã°patternã/(\a+)(\b+)/ã§ãã£ãå ´åãp1ã¯\a+ã«å¯¾ããä¸è´ãp2ã¯\b+ã«å¯¾ããä¸è´ã¨ãªãã¾ãããã®ã°ã«ã¼ããè«çåã®ä¸é¨ã§ããå ´åï¼"abc".replace(/(a)|(b)/, replacer)ãªã©ï¼ãä¸è´ããªã鏿è¢ã¯undefinedãªãã¾ãã offset-
ä¸è´ããé¨åæååã®ãåæä¸ã®æååå ¨ä½ã®ä¸ã§ã®ãªãã»ããã§ããä¾ãã°ãæååå ¨ä½ã
'abcd'ã§ãä¸è´ããé¨åæååã'bc'ãªãã°ããã®å¼æ°ã¯ 1 ã¨ãªãã¾ãã string-
åæä¸ã®æååå ¨ä½ã§ãã
groups-
ååä»ããã£ããã£ã°ã«ã¼ãã«å¯¾å¿ãã¦ãããã©ã¦ã¶ã¼ã®ãã¼ã¸ã§ã³ã§ã¯ã使ç¨ãããã°ã«ã¼ãåããã¼ã¨ããä¸è´ããé¨åãå¤ã¨ãããªãã¸ã§ã¯ãã«ãªãã¾ãï¼ä¸è´ããªãå ´åã¯
undefinedï¼ã
ï¼å¼æ°ã®æ£ç¢ºãªåæ°ã¯ã第ä¸å¼æ°ã RegExp ãªãã¸ã§ã¯ããã©ããããããªãã°ããã«æ¬å¼§ã§ãã£ããã£ããããµãä¸è´ãããã¤æå®ããã¦ãããã«ããã¾ããï¼
以ä¸ã®ä¾ã¯ newString ã« 'abc - 12345 - #$*%' ãã»ãããã¾ãã
function replacer(match, p1, p2, p3, offset, string) {
// p1 is non-digits, p2 digits, and p3 non-alphanumerics
return [p1, p2, p3].join(" - ");
}
const newString = "abc12345#$*%".replace(/(\D*)(\d*)(\W*)/, replacer);
console.log(newString); // abc - 12345 - #$*%
ãã®é¢æ°ã¯ãæåã®å¼æ°ã®æ£è¦è¡¨ç¾ãã°ãã¼ãã«ã§ããå ´åãããããå®å ¨ã«ä¸è´ãããã®ãç½®ãæãããããã¨ã«è¤æ°åå¼ã³åºããã¾ãã
ä¾
>replace() ã§æ£è¦è¡¨ç¾ãå©ç¨ãã
以ä¸ã®ä¾ã§ã¯ã replace() ã¡ã½ããã§æ£è¦è¡¨ç¾ãå©ç¨ãã¦ãã¾ãã
const str = "Twas the night before Xmas...";
const newStr = str.replace(/xmas/i, "Christmas");
console.log(newStr); // Twas the night before Christmas...
ãã㯠'Twas the night before Christmas...' ã¨åºåãã¾ãã
ã¡ã¢: æ£è¦è¡¨ç¾ã«ã¤ãã¦ã®ãã®ä»ã®ä¾ã¯ãæ£è¦è¡¨ç¾ã¬ã¤ããåç §ãã¦ãã ããã
大æåå°æåãåºå¥ããªããã©ã°ã¨ã°ãã¼ãã«ãã©ã°ã®ä½¿ç¨
ã°ãã¼ãã«ãªç½®æã¯ãæ£è¦è¡¨ç¾ã§ã®ã¿è¡ããã¨ãã§ãã¾ããæ¬¡ã®ä¾ã§ã¯ãæ£è¦è¡¨ç¾ã«ã°ãã¼ãã«ãã©ã°ã¨å¤§æåå°æåã®åºå¥ãããªããã©ã°ãå«ã¾ãã¦ããããã replace() ã¯æååä¸ã® 'apples' ã®ååºç¾ç®æã 'oranges' ã«ç½®ãæãããã¨ãã§ãã¾ãã
const re = /apples/gi;
const str = "Apples are round, and apples are juicy.";
const newStr = str.replace(re, "oranges");
console.log(newStr); // oranges are round, and oranges are juicy.
ãã®åºå㯠'oranges are round, and oranges are juicy' ã¨ãªãã¾ãã
æååå ã®åèªã®äº¤æ
次ã®ã¹ã¯ãªããã§ã¯ãæååå
ã®åèªã交æãã¾ããããã¹ããç½®ãæããããã«ããã®ã¹ã¯ãªããã¯ãã£ããã£ãªã³ã°ã°ã«ã¼ãã¨ç½®æãã¿ã¼ã³ $1 ããã³ $2 ã使ç¨ãã¦ãã¾ãã
const re = /(\w+)\s(\w+)/;
const str = "Maria Cruz";
const newStr = str.replace(re, "$2, $1");
console.log(newStr); // Cruz, Maria
ãã®åºå㯠'Cruz, Maria' ã¨ãªãã¾ãã
ä¸è´ããæåãä¿®æ£ããã¤ã³ã©ã¤ã³é¢æ°ã®ä½¿ç¨
次ã®ä¾ã§ã¯ãæååå ã«åºç¾ãã大æåã®ãã¹ã¦ã¯å°æåã«å¤æããããã¤ãã³ãä¸è´ããä½ç½®ã®ç´åã«æ¿å ¥ããã¾ããããã§éè¦ãªãã¨ã¯ã追å ã®æä½ã¯ãä¸è´ããã¢ã¤ãã ãç½®æããã¦æ»ãããåã«å¿ è¦ã¨ãããã¨ãããã¨ã§ãã
ç½®æãã颿°ã¯ä¸è´ããæçããã®é¢æ°ã®å¼æ°ã¨ãã¦é©ç¨ãã¾ããããã¦ããã®å¼æ°ã大æåå°æåå¤å½¢ããè¿å¤ã®ç´åã«ãã¤ãã³ãé£çµãã¾ãã
function styleHyphenFormat(propertyName) {
function upperToHyphenLower(match, offset, string) {
return (offset > 0 ? "-" : "") + match.toLowerCase();
}
return propertyName.replace(/[A-Z]/g, upperToHyphenLower);
}
styleHyphenFormat('borderTop')ãå
¥åãã㨠'border-top' ãè¿ãã¾ãã
æçµçãªç½®æãè¡ãããåã«ãä¸è´ã®çµæãããã«å¤æãããã®ã§ã颿°ã使ç¨ããå¿
è¦ãããã¾ããããã«ãããtoLowerCase() ã¡ã½ããã®åã«ä¸è´ã®è©ä¾¡ãè¡ããã¾ãã颿°ã使ããä¸è´ã使ã£ã¦ãããè¡ããã¨ããå ´åã toLowerCase() ã¯ä½ã®å¹æããªãã§ãããã
// åä½ããªã
const newString = propertyName.replace(/[A-Z]/g, "-" + "$&".toLowerCase());
ããã¯ã '$&'.toLowerCase() ã¯ãã¾ããã®æåããã¿ã¼ã³ã¨ãã¦ä½¿ç¨ãããåã«ï¼'$&' ã¨ããçµæã§ããï¼æååãªãã©ã«ã¨ãã¦è©ä¾¡ãããã ããããã§ãã
è¯æ°æ¸©åº¦ãåçã®ææ°æ¸©åº¦ã¨ç½®ãæãã
以ä¸ã®ä¾ã¯ãããè¯æ°æ¸©åº¦ãããã¨åçã®ææ°æ¸©åº¦ã¨ç½®ãæãã¾ãããã®è¯æ°æ¸©åº¦ã¯ "F" ã§çµããæ°ã§ãªããã°ãªãã¾ããããã®é¢æ°ã¯ "C" ã§çµããææ°ãè¿ãã¾ããä¾ãã°ãå
¥åãããæ°ã "212F" ã§ããå ´åããã®é¢æ°ã¯ "100C" ãè¿ãã¾ããå
¥åãããæ°ã "0F" ã§ãã£ãå ´åããã®é¢æ°ã¯ "-17.77777777777778C" ãè¿ãã¾ãã
ãã®æ£è¦è¡¨ç¾ test ã¯ãä»»æã®æ°ã F ã§çµãã£ã¦ããããã§ãã¯ãã¾ããè¯æ°æ¸©åº¦ã®æ°ã¯ã颿°ã® 第äºå¼æ° p1 ãéãã¦ããã®é¢æ°ã«ã¢ã¯ã»ã¹ã§ãã¾ãããã®é¢æ°ã¯æååå
ã§æ¸¡ãããè¯æ°æ¸©åº¦ããã¼ã¹ã¨ããææ°ã®æ°ã f2c() ã«ã»ãããã¾ãããããããf2c() ã¯ãææ°ã®æ°ãè¿ãã¾ãããã®é¢æ°ã¯ Perl ã® s///e ãã©ã°ã¨ä¼¼ã¦ãã¾ãã
function f2c(x) {
function convert(str, p1, offset, s) {
return `${((p1 - 32) * 5) / 9}C`;
}
const s = String(x);
const test = /(-?\d+(?:\.\d*)?)F\b/g;
return s.replace(test, convert);
}
æ±ç¨ãªãã¬ã¤ãµã¼ã®ä½æ
ä¸è´ããæååã«ãªãã»ããã®ãã¼ã¿ã追å ãããªãã¬ã¤ãµã¼ã使ãããã¨ãã¾ãã ãªãã¬ã¤ãµã¼é¢æ°ã¯ãã§ã« offset 弿°ãåãåã£ã¦ããã®ã§ãæ£è¦è¡¨ç¾ãéçã«åãã£ã¦ããã°ç°¡åã§ãã
"abcd".replace(/(bc)/, (match, p1, offset) => `${match} (${offset}) `);
// "abc (1) d"
ãããããã®ãªãã¬ã¤ãµã¼ãä»»æã®æ£è¦è¡¨ç¾ãã¿ã¼ã³ã§åä½ããããå ´åãä¸è¬åããã®ã¯é£ããã§ãããã ãã®ãªãã¬ã¤ãµã¼ã¯å¯å¤çã§ãã弿°ã®æ°ã¯åå¨ãããã£ããã£ã°ã«ã¼ãã®æ°ã«ä¾åãã¾ããæ®ä½å¼æ°ã使ç¨ãããã¨ãã§ãã¾ãããoffset ã string ãªã©ãé
åã«åéãã¦ãã¾ãã¾ããgroups ãæ£è¦è¡¨ç¾ã®å䏿§ã«ãã£ã¦æ¸¡ããããæ¸¡ãããªãã£ãããããããoffset ã«å¯¾å¿ãã弿°ãç¥ãå¦çãä¸è¬åãããã¨ã¯é£ããã§ãããã
function addOffset(match, ...args) {
const offset = args.at(-2);
return `${match} (${offset}) `;
}
console.log("abcd".replace(/(bc)/, addOffset)); // "abc (1) d"
console.log("abcd".replace(/(?<group>bc)/, addOffset)); // "abc (abcd) d"
ãã®ä¾ã§ã¯ args.at(-2) ã offset ã§ã¯ãªã string ã«ãªã£ã¦ãã¾ããããä¸è¨ã® addOffset ã®ä¾ã¯æ£è¦è¡¨ç¾ã«ååä»ãã°ã«ã¼ããæ ¼ç´ããã¦ããå ´åã«ã¯ãã¾ãåä½ãã¾ããã
代ããã«ãgroups ã¯ãªãã¸ã§ã¯ãã§ãããstring ã¯æååãªã®ã§ãåã«åºã¥ãã¦æå¾ã®ããã¤ãã®å¼æ°ãæ½åºããå¿
è¦ãããã¾ãã
function addOffset(match, ...args) {
const hasNamedGroups = typeof args.at(-1) === "object";
const offset = hasNamedGroups ? args.at(-3) : args.at(-2);
return `${match} (${offset}) `;
}
console.log("abcd".replace(/(bc)/, addOffset)); // "abc (1) d"
console.log("abcd".replace(/(?<group>bc)/, addOffset)); // "abc (1) d"
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-string.prototype.replace> |
ãã©ã¦ã¶ã¼ã®äºææ§
é¢é£æ å ±
String.prototype.replaceã®ããªãã£ã« (core-js) ï¼Symbol.replaceã¸ã®å¯¾å¿ãªã©ãç¾ä»£ã®ä¿®æ£ãå®è£ ã«å¯¾å¿ãããã®ï¼- æ£è¦è¡¨ç¾ã¬ã¤ã
String.prototype.replaceAll()String.prototype.match()RegExp.prototype.exec()RegExp.prototype.test()Symbol.replaceRegExp.prototype[Symbol.replace]()