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ìâ©.
String ê°ì replace() ë©ìëë 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ê³¼ ì¼ì¹íë ë¶ë¶ 문ìì´ì ëì²´í©ëë¤. ì¬ë¬ í¹ì ëì²´ í¨í´ì ì§ìí©ëë¤. ìë ëì²´í ë´ì©ì¼ë¡ 문ìì´ë¡ ì§ì í기를 ì°¸ê³ íì¸ì - í¨ìì¼ ê²½ì° ì´ í¨ìë ê° ì¼ì¹ í목ë§ë¤ í¸ì¶ëë©° ë°í ê°ì ëì²´ 문ìì´ì ì¬ì©ë©ëë¤. ì´ í¨ìì ì ê³µëë ì¸ìë ìë ëì²´í ë´ì©ì¼ë¡ í¨ì ëª ìí기 ì¹ì ìì ì¤ëª íê³ ììµëë¤.
- 문ìì´ì¼ ê²½ì°,
ë°í ê°
í¨í´ì ë¨ì¼, ì¼ë¶ í¹ì 모ë ì¼ì¹ íëª©ì´ ëª ìë ëì²´ 문ìì´ë¡ ëì¹ë ìë¡ì´ 문ìì´ì ë°íí©ëë¤.
ì¤ëª
ì´ ë©ìëë í¸ì¶ë 문ìì´ ê°ì ë³ê²½íì§ ììµëë¤. ì 문ìì´ì ë°íí©ëë¤.
문ìì´ í¨í´ì í ë²ë§ ë°ëëë¤. ì ì ê²ì ë° ë°ê¾¸ê¸°ë¥¼ ìííë ¤ë©´ 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"; ì ê·ìì ë ë²ì§¸ 그룹ì ê°ì§ì§ ììµëë¤.
"foo".replace("f", "$1");
// "$1oo"; í¨í´ì´ 문ìì´ì´ë©°, ì´ë í 그룹ì ê°ì§ì§ ììµëë¤.
"foo".replace(/(f)|(g)/, "$2");
// "oo"; ë ë²ì§¸ ê·¸ë£¹ì´ ì¡´ì¬íì§ë§ ì¼ì¹íì§ ììµëë¤.
ëì²´í ë´ì©ì¼ë¡ í¨ì ëª ìí기
í¨ì를 ë ë²ì§¸ 매ê°ë³ìë¡ ëª ìí ì ììµëë¤. ì´ ê²½ì° í¨ìë ê°ê°ì 문ìì´ ì¼ì¹ê° ë°ìí ëë§ë¤ í¸ì¶ë©ëë¤. ì´ í¨ìì ê²°ê³¼(ë°í ê°)ë ëì²´ 문ìì´ë¡ ì¬ì©ë©ëë¤.
ì°¸ê³ : ììì ì¸ê¸í í¹ì ëì²´ í¨í´ì ëì²´ì í¨ììì ë°íë 문ìì´ìë ì ì©ëì§ ììµëë¤.
í¨ì ìê·¸ëì²ë ìëì ê°ìµëë¤.
function replacer(match, p1, p2, /* â¦, */ pN, offset, string, groups) {
return replacement;
}
í¨ìì ì¸ìë ìëì ê°ìµëë¤.
match- : ì¼ì¹í ë¶ë¶ 문ìì´. ìì
$&ì í´ë¹í©ëë¤.
- : ì¼ì¹í ë¶ë¶ 문ìì´. ìì
p1, p2, â¦, pN- :
replace()ì 첫 ë²ì§¸ ì¸ìë¡ ì ê³µë ìº¡ì² ê·¸ë£¹(ëª ëª ë ìº¡ì² ê·¸ë£¹ í¬í¨)ìì ì°¾ìnë²ì§¸ 문ìì´ìRegExpê°ì²´ì ëë¤. (ìì$1,$2ë±ì í´ë¹í©ëë¤.) ì를 ë¤ì´patternì´/(\a+)(\b+)/ì´ë¼ë©´,p1ì\a+ì ì¼ì¹íì§ë§p2ë\b+ì ì¼ì¹í©ëë¤. ê·¸ë£¹ì´ ë¶ì¼ì¹ì ì¼ë¶ì¸ ê²½ì°(ì:"abc".replace(/(a)|(b)/, replacer)), ì¼ì¹íì§ ìë ëì²´ì´ëundefinedì´ ë©ëë¤.
- :
offset- ê²ì¬ ì¤ì¸ ì ì²´ 문ìì´ ë´ìì ì¼ì¹íë ë¶ë¶ 문ìì´ì ì¤íì
ì
ëë¤. ì를 ë¤ì´ ì ì²´ 문ìì´ì´
'abcd'ì´ê³ ì¼ì¹íë ë¶ë¶ 문ìì´ì´'bc'ì¸ ê²½ì° ì´ ì¸ìë1ì´ ë©ëë¤.
- ê²ì¬ ì¤ì¸ ì ì²´ 문ìì´ ë´ìì ì¼ì¹íë ë¶ë¶ 문ìì´ì ì¤íì
ì
ëë¤. ì를 ë¤ì´ ì ì²´ 문ìì´ì´
string- : ê²ì¬í ì ì²´ 문ìì´.
groups- : í¤ê° ì¬ì©ë 그룹 ì´ë¦ì´ê³ ê°ì´ ì¼ì¹íë ë¶ë¶(ì¼ì¹íì§ ìì¼ë©´
undefined)ì¸ ê°ì²´ì ëë¤.patternì ëª ëª ë ìº¡ì² ê·¸ë£¹ì´ íë ì´ì í¬í¨ë ê²½ì°ìë§ ì¡´ì¬í©ëë¤.
- : í¤ê° ì¬ì©ë 그룹 ì´ë¦ì´ê³ ê°ì´ ì¼ì¹íë ë¶ë¶(ì¼ì¹íì§ ìì¼ë©´
ì íí ì¸ìì ê°ìë 첫 ë²ì§¸ ì¸ìê° RegExp ê°ì²´ì¸ì§, ê·¸ë ë¤ë©´ ì¼ë§ë ë§ì ìº¡ì² ê·¸ë£¹ì´ ìëì§ì ë°ë¼ ë¬ë¼ì§ëë¤.
ìë ìì ë newStringì 'abc - 12345 - #$*%'ë¡ ì¤ì í©ëë¤.
function replacer(match, p1, p2, p3, offset, string) {
// p1 ì ì«ìê° ìëë©° p2 ë ì«ìì´ë©°, p3 ë ìí벳과 ì«ìê° ìëëë¤.
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() ì¬ì©í기
ì ì 문ìì´ ëì²´ë ì ê· ííìì¼ë¡ë§ ê°ë¥í©ëë¤. ë¤ì ìì ë ì ê· ííìì´ ì ì ê·¸ë¦¬ê³ ëì문ì 무ì íëê·¸ì´ í¬í¨ëì´ ìì´ì replace()ê° ë¬¸ìì´ìì 'apple'ì´ ëíë ëë§ë¤ 'orange'ë¡ ë¬¸ìì´ì ë°ê¾¸ëë¡ íì©í©ëë¤.
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.777777777778C"를 ë°íí©ëë¤.
ì ê·ì 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);
}
ì ë¤ë¦ ëì²´ì ë§ë¤ê¸°
ì¼ì¹íë 모ë 문ìì´ì ì¤íì
ë°ì´í°ë¥¼ ì¶ê°íë ëì²´ì를 ë§ë¤ê³ ì¶ë¤ê³ ê°ì í´ ë³´ê² ìµëë¤. replacer í¨ìë ì´ë¯¸ offset 매ê°ë³ì를 ë°ê¸° ë문ì ì ê·ìì ì ì ì¼ë¡ ìê³ ìë¤ë©´ 문ì ê° ëì§ ììµëë¤.
"abcd".replace(/(bc)/, (match, p1, offset) => `${match} (${offset}) `);
// "abc (1) d"
ê·¸ë¬ë ì´ ëì²´ìë 모ë ì ê·ì í¨í´ìì ìëíëë¡ íë ¤ë©´ ì¼ë°íí기 ì´ë µìµëë¤. ëì²´ìë ê°ë³ì ì´ë©°, ë°ë ì¸ìì ìë ì¡´ì¬íë ìº¡ì² ê·¸ë£¹ì ìì ë°ë¼ ë¬ë¼ì§ëë¤. ëë¨¸ì§ ë§¤ê°ë³ì를 ì¬ì©í ì ìì§ë§ offset, string ë±ì ë°°ì´ë¡ ìì§í ìë ììµëë¤. ì ê·ìì IDì ë°ë¼ 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"
ìì addOffset ìì ë ì ê·ìì ëª
ëª
ë ê·¸ë£¹ì´ í¬í¨ë ê²½ì° ìëíì§ ììµëë¤. ì´ ê²½ì° args.at(-2)ê° offset ëì stringì´ ë기 ë문ì
ëë¤.
ëì 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® 2026 Language Specification > # sec-string.prototype.replace > |