문서 작업 가이드
정규식 캡처와 경계로 텍스트를 안전하게 치환하기
리터럴·정규식 치환을 선택하고 Unicode 경계와 캡처 토큰을 검증하며 위험한 패턴을 제한하고 정확한 수치와 결과를 실제 사용 전에 확인합니다.
작성 및 검수 SimpleWebUtils게시일: 검토일:
이 작업 흐름을 검증한 방법
텍스트 찾기 및 바꾸기에서 다음 가이드 픽스처로 검증을 시작했습니다: “이름 있는 캡처로 쉼표 구분 이름 바꾸기”. “원본 고정 및 분류”부터 “플래그와 치환 의미 명시”까지 실행해 생성 결과를 기대값과 대조했습니다. 별도 한계 검토에는 “리터럴 값에 정규식 사용”, “다국어에 ASCII 단어 경계 신뢰” 항목을 사용했습니다.
이름 있는 capture 치환은 쉼표 형식 이름 두 개만 Jane Doe와 Min Kim으로 바꾸고 후보 2건·치환 2건을 보고했으며 CRLF 출력을 유지했습니다.
문제 상황
일괄 치환은 그럴듯하지만 잘못된 텍스트를 조용히 만들 수 있습니다. 짧은 값은 긴 식별자 안에도 있고, 대소문자 무시는 범위를 넓히며, 정규식 문장부호는 패턴을 바꾸고, $1은 리터럴 또는 캡처가 될 수 있습니다. ^와 점은 플래그에 따라 달라지고 0길이 일치는 원본을 소비하지 않고 삽입합니다. 큰 치환은 출력도 폭증시킬 수 있으며, 실행 완료만으로 코드·설정·가져온 데이터가 정상이라는 뜻은 아닙니다. 따라서 규칙을 좁히고 대표 입력에서 증명하며 정확한 증거와 실제 파서 검증을 남겨야 합니다.
이럴 때 사용하세요
- 호스트명·환경 레이블·경로·식별자·문구가 텍스트에 여러 번 나타날 때
- 구조화된 이름·날짜·로그 필드를 번호 또는 이름 있는 캡처로 재배치할 때
- 긴 단어와 밑줄 식별자는 유지하고 독립된 값만 바꿀 때
- 명시적인 치환 escape로 통제된 줄바꿈이나 탭을 삽입할 때
- 민감한 복사 텍스트를 공유 전 로컬 placeholder로 바꿀 때
단계
- 1단계
원본 고정 및 분류
손대지 않은 사본을 보관하고 대상 형식·인코딩·LF 또는 CRLF를 확인합니다. 대소문자, 주변 Unicode 단어 문자, 들여쓰기, 달러 기호가 의미 있는지 기록합니다.
- 2단계
가장 좁은 리터럴 규칙으로 시작
대상이 정확한 값이면 리터럴 텍스트를 사용합니다. 대상 시스템이 대소문자를 구분하면 정확 일치를 켜고, 긴 글자·숫자·결합 문자·밑줄 수열 안의 일치가 잘못이라면 전체값 경계를 켭니다.
- 3단계
치환 전 정규식 증명
패턴이 필요하면 Regex Tester에서 대표적인 성공·실패·Unicode·여러 줄·0길이 사례를 먼저 실행합니다. 모호하게 중첩된 수량자를 피하고 캡처 번호와 이름을 확인하며 1초 제한에 걸리면 패턴이나 입력을 줄입니다.
- 4단계
플래그와 치환 의미 명시
^와 $가 줄마다 적용될 때만 multiline, 점이 줄바꿈을 넘을 때만 dot-all, 대소문자 변형이 같은 값일 때만 무시 옵션을 켭니다. $1·$<name>·$&·$$를 쓸 때 캡처 확장을 켜고 달러가 평문이면 끕니다.
- 5단계
실행 후 진단 감사
일치 후보, 허용된 치환, 경계 거부, 출력 바이트, 0길이 경고를 비교합니다. 예상 밖의 거부나 삽입 수치는 경고를 무시할 이유가 아니라 규칙을 바꿀 근거입니다.
- 6단계
원본과 결과 정확 비교
Diff Checker에서 모든 변경 구역을 설명합니다. 비일치 Unicode와 줄바꿈이 유지됐는지, escape가 의도한 제어 문자만 넣었는지, 출력 증가가 계획에 비례하는지 확인합니다.
- 7단계
대상 검증과 증거 보관
검토한 출력을 복사·다운로드한 뒤 임시 대상에서 설정 파싱, 코드 컴파일, 테스트, 가져오기 검증 또는 렌더링을 수행합니다. 민감 원문을 불필요하게 저장하지 않으면서 원본 식별자·옵션·수치·diff·검증 결과를 남깁니다.
예시
이름 있는 캡처로 쉼표 구분 이름 바꾸기
입력
원본:
Doe, Jane
Kim, Min
패턴: (?<last>\p{L}+),\s+(?<first>\p{L}+)
치환: $<first> $<last>
정규식, 대소문자 정확, 캡처 확장 켬출력
Jane Doe
Min Kim
후보: 2 | 치환: 2 | 경계 거부: 0
정확한 CRLF 출력과 대상 시스템을 다시 검증합니다.흔한 실수
리터럴 값에 정규식 사용
불필요한 정규식은 메타 문자·캡처·플래그·성능 위험을 더합니다. 실제 입력 변형에 패턴이 필요할 때만 리터럴에서 옮겨갑니다.
다국어에 ASCII 단어 경계 신뢰
JavaScript \b는 ASCII 중심 규칙입니다. 도구의 Unicode 인접 규칙을 사용하되 실제 언어·결합 문자·밑줄 식별자 사례를 테스트하세요.
캡처 확장을 모호하게 둠
같은 $1이 캡처 또는 평문이 될 수 있습니다. 옵션을 의도적으로 선택하고 달러 기호 사례를 결과에서 확인하세요.
삽입 수를 세지 않고 0길이 사용
lookaround와 anchor는 여러 위치에 텍스트를 더할 수 있습니다. 내보내기 전 0길이 수와 출력 바이트를 확인하세요.
치환 수를 검증으로 오해
수치는 규칙 실행만 증명합니다. 정확한 diff와 대상 파서·테스트·가져오기·렌더링을 실행해야 합니다.
자주 묻는 질문
언제 정규식 대신 리터럴을 사용하나요?
모든 대상이 같은 정확한 문자열이면 리터럴을 사용하세요. 패턴 문법이 사라지고 치환 달러도 평문이 되어 정확성과 성능 위험이 줄어듭니다.
왜 정규식을 먼저 따로 테스트하나요?
치환 전에 false positive, 누락된 Unicode 사례, 캡처 구조, 0길이 동작, 비싼 패턴을 드러낼 수 있기 때문입니다.
전체값 경계가 모든 언어의 단어를 이해하나요?
아니요. 글자·숫자·결합 문자·밑줄에 대한 투명한 Unicode 인접 규칙이며 사전·형태소 분석이 아닙니다. 대표 언어 사례가 여전히 필요합니다.
정규식 모드에서 평문 $1은 어떻게 넣나요?
캡처 확장을 끄고 $1을 입력합니다. 확장을 켠 상태에서는 $$가 달러 하나이며 필요한 문자와 조합한 결과를 검토하세요.
정규식 치환이 왜 시간 초과되나요?
일부 backtracking 패턴은 특정 입력에서 실행 시간이 폭발합니다. Worker가 1초 후 중단하면 제한을 우회하지 말고 패턴을 단순화하거나 입력을 줄이세요.
로컬 치환만으로 익명화가 충분한가요?
아니요. 업로드는 막지만 규칙이 식별자를 놓치거나 문맥이 재식별을 허용할 수 있습니다. 정확한 diff와 조직의 개인정보 절차를 적용하세요.