String.prototype.replaceAll()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since August 2020.
replaceAll()
메서드는 pattern
의 모든 일치 항목이 replacement
로 대체된 새 문자열을 반환합니다. pattern
은 문자열 또는 RegExp
일 수 있으며 replacement
는 각 일치 항목에 대해 호출되는 문자열 또는 함수일 수 있습니다. 원래 문자열은 변경되지 않습니다.
시도해보기
구문
replaceAll(pattern, replacement)
매개변수
pattern
-
문자열이거나
Symbol.replace
메서드가 있는 객체일 수 있습니다. 일반적인 예로 정규식이 있습니다.Symbol.replace
메서드가 없는 모든 값은 문자열로 강제 변환됩니다.pattern
이 정규식이면 전역(g
) 플래그가 설정되어 있어야 합니다. 그렇지 않으면TypeError
가 발생합니다. replacement
-
문자열이거나 함수일 수 있습니다. 교체는
String.prototype.replace()
와 동일한 의미 체계를 갖습니다.
반환 값
패턴의 모든 일치 항목이 교체자로 대체된 새 문자열입니다.
예외
설명
이 메서드는 호출된 문자열 값을 변경하지 않고 새 문자열을 반환합니다.
replace()
와 달리 이 메서드는 첫 번째 문자열뿐만 아니라 문자열의 모든 항목을 바꿉니다. 특수 문자를 이스케이프하지 않고 RegExp()
생성자를 호출하면 의도하지 않게 의미 체계가 변경될 수 있으므로 문자열이 정적이라고 확신하지 못할 때 특히 유용합니다.
function unsafeRedactName(text, name) {
return text.replace(new RegExp(name, "g"), "[REDACTED]");
}
function safeRedactName(text, name) {
return text.replaceAll(name, "[REDACTED]");
}
const report =
"A hacker called ha.*er used special characters in their name to breach the system.";
console.log(unsafeRedactName(report, "ha.*er")); // "A [REDACTED]s in their name to breach the system."
console.log(safeRedactName(report, "ha.*er")); // "A hacker called [REDACTED] used special characters in their name to breach the system."
pattern
이 Symbol.replace
메서드(RegExp
객체 포함)가 있는 객체인 경우 대상 문자열과 replacement
를 인수로 하여 해당 메서드를 호출합니다. 반환 값은 replaceAll()
의 반환 값이고, 이 경우 replaceAll()
의 동작은 @@replace
메서드에 의해 완전히 인코딩되므로 replace()
와 동일한 결과를 갖게 됩니다(정규식이 전역이라는 추가 입력 유효성 검사는 제외).
pattern
이 빈 문자열인 경우엔 split()
동작과 유사하게 모든 UTF-16 코드 단위 사이에 교체자가 삽입됩니다.
"xxx".replaceAll("", "_"); // "_x_x_x_"
regex 속성(특히 sticky 플래그)이 replaceAll()
과 상호 작용하는 방식에 대한 자세한 내용은 RegExp.prototype[@@replace]()
를 참조하세요.
예제
replaceAll() 사용
"aabbcc".replaceAll("b", ".");
// 'aa..cc'
비전역 정규식 오류
"aabbcc".replaceAll(/b/, ".");
// TypeError: replaceAll must be called with a global RegExp
아래는 잘 작동합니다.
"aabbcc".replaceAll(/b/g, ".");
("aa..cc");
명세서
Specification |
---|
ECMAScript Language Specification # sec-string.prototype.replaceall |
브라우저 호환성
BCD tables only load in the browser