정규식 테스터 · 매치 확인 · 치환 미리보기

패턴을 고치면서 바로 결과를 확인합니다. 어느 글자가 잡혔는지, 괄호 그룹에 무엇이 들어갔는지, 치환하면 어떻게 되는지를 한 화면에서 봅니다. 브라우저의 자바스크립트 엔진 그대로라서 실제 JS 코드와 결과가 같습니다.

예: [가-힣]+, ^\s*#, (\w+)@(\w+)\.com
정규식 테스터 · 매치 확인 · 치환 미리보기모두의계산기

어떤 엔진으로 검사하는가

브라우저의 자바스크립트 정규식 엔진(ECMAScript)을 그대로 씁니다. 그래서 JS·TypeScript·Node 코드에 넣을 패턴은 여기서 본 결과와 정확히 같습니다. Python의 re, Java, PCRE(PHP·grep -P), Go의 RE2는 문법이 조금씩 다릅니다. 예를 들어 전방탐색 (?=…)과 후방탐색 (?<=…)은 JS에서 되지만 Go에서는 안 되고, \p{Han} 같은 유니코드 속성은 JS에서 u 플래그가 있어야 합니다. 입력은 서버로 전송되지 않습니다.

플래그의 의미

g(global)는 첫 매치에서 멈추지 않고 끝까지 찾습니다. 없으면 replace도 첫 번째 하나만 바꿉니다. i는 대소문자를 구분하지 않습니다(한글에는 영향 없음). m(multiline)은 ^$가 문자열 전체가 아닌 각 줄의 시작·끝에 매치되게 합니다. 줄마다 검사하는 로그 분석에 필요합니다. s(dotAll)는 .이 줄바꿈까지 포함하도록 합니다. 기본적으로 .은 줄바꿈을 건너뛰지 못해 여러 줄에 걸친 블록을 잡으려면 이 플래그가 있어야 합니다. u는 이모지 같은 서로게이트 쌍을 한 글자로 다루고 \p{…} 속성 클래스를 켭니다. 대신 불필요한 이스케이프(\-, \: 등)가 오류가 되므로 기존 패턴이 갑자기 깨지면 그 때문입니다.

치환 문자열의 특수 기호

$1, $2는 괄호 그룹, $&는 매치 전체, $<이름>은 이름 있는 그룹, $$는 달러 기호 자체입니다. 파이썬의 \1 표기는 JS에서 동작하지 않습니다. 치환 결과는 String.prototype.replace에 그대로 넘긴 값이므로 코드에 복사하면 같은 결과가 나옵니다.

한글 패턴 작성 요령

완성형 한글은 [가-힣], 자음·모음만 있는 글자는 [ㄱ-ㅎㅏ-ㅣ]로 잡습니다. \w는 영문·숫자·밑줄만 뜻하고 한글은 포함하지 않으므로 한글 단어 경계를 \b로 잡으려 하면 기대와 다르게 동작합니다. 전화번호는 0\d{1,2}-\d{3,4}-\d{4}, 이메일은 완벽한 검증이 불가능하므로 [^\s@]+@[^\s@]+\.[^\s@]+ 정도의 느슨한 패턴이 실무에서 흔히 쓰입니다.

빈 매치와 무한 루프

a*처럼 빈 문자열에도 매치되는 패턴은 모든 위치에서 길이 0 매치가 생깁니다. 하이라이트에서 붉은 세로선으로 표시되며, 도구는 한 칸씩 전진해 무한 루프를 피합니다. 실제 코드에서 exec 루프를 직접 돌릴 때도 같은 처리가 필요합니다.

자주 묻는 질문

매치가 하나만 나와요.

g 플래그가 꺼져 있으면 첫 매치만 찾습니다. 전체를 보려면 g를 켜세요.

이모지가 두 글자로 잡혀요.

u 플래그를 켜면 서로게이트 쌍을 한 글자로 취급합니다. 위치(인덱스)는 여전히 UTF-16 단위로 표시됩니다.

다른 언어에서는 동작이 달라요.

엔진마다 문법이 다릅니다. 후방탐색, 유니코드 속성, 소유 수량자, 원자 그룹 등 고급 기능은 해당 언어 문서에서 지원 여부를 확인해야 합니다.

함께 보기