Baseline Widely available
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"));
// Expected output: "I think my dog is cuter than your dog!"
const regex = /Dog/i;
console.log(paragraph.replace(regex, "ferret"));
// Expected output: "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"
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ
å ±
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