replaceAll을 썼는데 그대로라면, 반환값부터 보세요

JavaScript의 replaceAll()은 바뀐 문자열을 반환하며 원본 문자열은 그대로 둡니다. 호출만 하고 반환값을 저장하지 않았다면, 다음 줄에서 원래 변수를 읽었을 때 바뀌지 않은 값이 나옵니다.

AI가 만든 치환 코드 뒤에서 원문이 그대로 나온다면, 먼저 결과를 어디에 담았는지 보세요. “전혀 안 바뀜”과 “첫 번째만 바뀜”은 확인할 지점이 다릅니다.

호출한 결과를 버린 경우부터 구분합니다

실제 서비스가 아닌 짧은 합성 문자열로 확인할 수 있습니다. 첫 호출은 반환값을 받지 않았고, 두 번째 호출은 result에 받았습니다.

const text = "draft draft";
text.replaceAll("draft", "done");
console.log(text); // "draft draft"

const result = text.replaceAll("draft", "done");
console.log(result); // "done done"
console.log(text); // "draft draft"

원본과 새 반환값을 뜻하는 두 종이띠, 반환값을 담을 코랄색 보관홈 옆에 바꿨는데 왜 그대로라는 문구가 놓인 그림
새 문자열이 반환되어도 그 값을 저장하지 않으면 다음 처리에 남지 않습니다. 설명용 생성 일러스트입니다.

첫 출력은 그대로 draft draft입니다. 바뀐 결과는 result에 있고, 그 뒤에도 text는 원문을 유지합니다. 원래 변수 이름으로 계속 처리해야 한다면 let text = "draft draft";로 선언한 뒤 text = text.replaceAll("draft", "done");처럼 새 값을 다시 대입할 수 있습니다.

const로 선언한 변수에 다시 대입하는 코드와 섞지 마세요. MDN의 replaceAll 반환값 설명도 원본을 변경하는 대신 새 문자열을 반환한다고 명시합니다.

첫 번째만 바뀌었다면, 찾을 값을 어떻게 넘겼는지 보세요

문자열을 검색 인수로 준 replace()는 첫 일치만 바꿉니다. 같은 문자열을 replaceAll()에 주면 모든 일치를 바꿉니다. replace()라도 전역 정규식인 /draft/g를 주면 여러 곳을 바꿀 수 있습니다.

const repeated = "draft draft";
console.log(repeated.replace("draft", "done")); // "done draft"
console.log(repeated.replaceAll("draft", "done")); // "done done"
console.log(repeated.replace(/draft/g, "done")); // "done done"

try {
  repeated.replaceAll(/draft/, "done");
} catch (error) {
  console.log(error.name); // "TypeError"
}

draft draft 원본 종이띠와 done done 반환값 종이띠를 나누고 새 결과에서 보관홈으로 화살표가 이어지는 그림
원본과 반환값은 구분해서 읽습니다. 실행 화면이 아닌 설명용 생성 그림이며, 실제 출력은 본문 코드에 적었습니다.

따라서 “replace는 언제나 한 곳만 바꾼다”는 설명은 범위가 넓습니다. MDN의 replace 정의는 검색 인수가 문자열인 경우에 첫 일치만 바꾼다는 조건을 둡니다.

반대로 replaceAll()에 정규식을 넘길 때는 g 플래그가 필요합니다. 예제의 /draft/에는 이 플래그가 없어 TypeError가 납니다. 문자열 "draft"를 넘기는 호출에는 정규식 플래그를 붙일 자리가 없습니다. 이 조건은 ECMAScript replaceAll 명세에서도 확인할 수 있습니다.

점 하나도 문자 검색과 패턴 검색이 다릅니다

정확히 a.b라는 글자를 찾으려는 경우를 보겠습니다. 문자열 검색의 점과 정규식의 점을 같은 뜻으로 쓰면 예상 밖 항목도 바뀔 수 있습니다.

const names = "a.b a-b";
console.log(names.replaceAll("a.b", "X")); // "X a-b"
console.log(names.replace(/a.b/g, "X")); // "X X"

문자 그대로와 패턴으로 찾기라는 문구 아래 서로 다른 범위의 토큰을 보는 남색·청록 돋보기 두 개
문자 검색과 정규식 검색의 조건 차이를 표현한 생성 일러스트입니다. 정확한 일치 결과는 본문의 a.b 예제를 따릅니다.

첫 줄은 a.b만 바꾸고 a-b는 남깁니다. 두 번째 줄의 정규식에서 점은 이 예제의 점과 하이픈 양쪽에 일치하므로 둘 다 X가 됩니다. 단순히 여러 곳을 바꾸려고 찾을 문자열을 무조건 정규식으로 바꿀 필요는 없습니다.

치환할 새 값 쪽에도 별도의 문법이 있습니다. 예를 들어 문자열 치환값의 $&는 일치한 부분을 넣는 특수 패턴입니다. 임의의 치환 텍스트까지 다룬다면 MDN의 치환 문자열 규칙을 함께 확인해야 합니다. 이 글의 예제는 고정된 done과 X를 사용합니다.

다시 요청하기 전에 실패 지점을 한 문장으로 적으세요

“결과 변수가 원문과 같은지”, “첫 일치만 바뀌었는지”, “정규식을 넘기자 오류가 났는지”를 나눠 적으면 고칠 코드가 좁혀집니다. 위 예제에서는 각각 반환값 저장, 문자열 검색 인수의 메서드 선택, 정규식의 g 플래그를 확인합니다.

더 넓은 코드 수정까지 맡겼다면 AI 완료 보고 뒤 실제 코드를 검수하는 순서로 이어갈 수 있습니다. 치환 예제의 출력이 맞다는 사실만으로 실제 서비스의 입력·저장·화면까지 검증된 것은 아닙니다.

2026년 10월 24일 Windows x64의 Aside 브라우저에서 본문 코드 3블록과 재대입·치환 문자열의 보조 조건 2개를 합성 데이터로 확인했습니다. 브라우저가 보고한 User-Agent의 Chrome 버전은 154.0.0.0입니다. 이 결과는 위 예제의 동작에 한정하며 실제 서비스·사용자 데이터나 다른 실행 환경 전체를 검증한 것은 아닙니다.

출처 및 확인일