정규식 테스트 사용법
- 정규식을 입력합니다. 앞뒤의 슬래시는 빼고
/\d+/가 아니라\d+처럼 씁니다. - 플래그를 정합니다. 옆 칸에
g(모두 찾기),gi(대소문자도 무시)처럼 붙여 씁니다. 한글을\p{…}로 찾을 때는u가 꼭 있어야 합니다. - 테스트할 텍스트를 붙여 넣습니다. 일치한 부분이 텍스트 안에 번갈아 가며 다른 색으로 강조되고, 아래 표에 일치마다 위치와 캡처 그룹의 내용이 나옵니다.
- 치환을 해 봅니다. 모드에서 찾아 바꾸기를 고르고 바꿀 내용에
$1이나$<이름>을 넣으면, 바꾼 결과가 복사 버튼과 함께 맨 위에 나옵니다. - 코드로 옮깁니다. 결과에는 정규식 리터럴과, 백슬래시를 두 번씩 써 둔
new RegExp(…)형태가 함께 나오므로 그대로 복사하면 됩니다.
문법 오류가 있으면 무엇이 문제인지와 고치는 방법을 한국어로 먼저 보여 주고, 브라우저가 낸 원래 메시지를 덧붙입니다.
어떤 정규식 문법인가요?
정규식에는 방언이 있습니다. 이 테스트 도구는 여러분 브라우저의 JavaScript 엔진(Chrome·Edge의 V8, Firefox의 SpiderMonkey, Safari의 JavaScriptCore)으로 패턴을 실행하며, 이 엔진들은 모두 ECMAScript 표준을 따릅니다. 그래서 여기서 동작하는 패턴은 JavaScript, TypeScript, Node.js, React 프로젝트에서도 똑같이 동작합니다. Java(Spring 백엔드), Python, PHP와는 대부분 같지만 몇 가지가 다릅니다.
| 기능 | JavaScript(이 도구) | Java·Python·PCRE |
|---|---|---|
| 이름 있는 그룹 | (?<name>…), 치환에서 $<name> | Python은 (?P<name>…), Java는 치환에서 ${name} |
소유 수량자 a++, 원자 그룹 (?>…) | 지원하지 않음 | Java·PCRE는 지원, Python은 3.11부터 |
\d, \w, \b | ASCII만: \w는 한글과 일치하지 않음 | Python 3는 기본으로 한글도 \w |
유니코드 속성 \p{…} | u나 v 플래그가 있을 때 | Java·PCRE는 지원, Python의 re는 미지원 |
인라인 플래그 (?i) | 패턴 전체에는 쓸 수 없음 | 지원 |
Java 코드에 옮길 때는 문자열 안에서 백슬래시를 두 번 써야 하므로 \d는 "\\d"가 됩니다. 결과의 JavaScript 코드 줄이 이미 그렇게 바꿔 둔 형태라 Java에서도 거의 그대로 쓸 수 있습니다.
한글을 찾는 정규식: [가-힣]과 \p{Script=Hangul}
한국어 텍스트를 다룰 때 가장 많이 쓰는 패턴은 [가-힣]입니다. 유니코드에서 ‘가’(U+AC00)부터 ‘힣’(U+D7A3)까지는 현대 한글 완성형 음절 11,172자가 순서대로 놓여 있어서, 이 범위 하나로 모든 음절을 찾을 수 있습니다. 다만 자음이나 모음만 있는 글자는 이 범위 밖에 있습니다. 텍스트 안녕하세요 ㅋㅋㅋ Hello 123에 패턴을 실행하면 다음과 같습니다(이 도구의 코드로 직접 실행한 결과).
| 패턴 | 플래그 | 찾은 것 |
|---|---|---|
[가-힣]+ | g | 안녕하세요 |
[ㄱ-ㅎㅏ-ㅣ]+ | g | ㅋㅋㅋ |
\p{Script=Hangul}+ | gu | 안녕하세요, ㅋㅋㅋ |
\w+ | g | Hello, 123 |
\w는 한글을 찾지 않습니다. JavaScript에서\w는 u 플래그가 있어도 A–Z, a–z, 0–9, _뿐입니다. 한글과 영문을 모두 찾으려면[\w가-힣]+처럼 직접 묶으세요.\b도 한글 앞뒤에서는 동작하지 않습니다.\b한글\b는 ‘한글 맞춤법’에서 없음을 찾습니다. 한글 단어 경계가 필요하면 후방·전방탐색으로 씁니다:(?<![가-힣])한글(?![가-힣])은 ‘한글 맞춤법, 한글날’에서 앞의 ‘한글’ 하나만 찾습니다.- 맥에서 온 파일 이름은 자모가 분리되어 있을 수 있습니다. macOS는 파일 이름의 한글을 초성·중성·종성으로 나눈 형태(NFD)로 저장하는 경우가 있어, 겉보기에는 같은 ‘한글’이라도
[가-힣]와 일치하지 않습니다. 검사하기 전에str.normalize('NFC')로 합치세요.
자주 쓰는 정규식 모음
복사해서 입력란에 넣고 필요에 맞게 고쳐 쓰세요. ‘예시에서 찾은 것’ 열은 이 도구의 코드로 실제로 실행한 결과입니다.
| 용도 | 패턴 | 플래그 | 예시에서 찾은 것 | 참고 |
|---|---|---|---|---|
| 휴대폰 번호 | 01[016789]-?\d{3,4}-?\d{4} | g | 연락처 010-1234-5678, 01098765432, 02-123-4567 → 010-1234-5678, 01098765432 | 하이픈은 있어도 없어도 됩니다. 지역번호(02 등)로 시작하는 유선 번호는 찾지 않습니다. |
| 사업자등록번호 | \d{3}-\d{2}-\d{5} | g | 사업자등록번호 123-45-67890 → 123-45-67890 | 자릿수 모양만 봅니다. 실제로 있는 번호인지는 마지막 검증 숫자 계산이나 국세청 조회로 확인해야 합니다. |
| 우편번호(5자리) | \b\d{5}\b | g | 서울 강남구 06236, 부산 48058 → 06236, 48058 | 2015년부터 쓰는 5자리 국가기초구역번호입니다. 0으로 시작하는 번호가 많으니 숫자가 아니라 문자열로 저장하세요. |
| 이메일 주소(실용형) | [\w.+-]+@[\w-]+(?:\.[\w-]+)+ | g | 문의 minjun.kim@example.co.kr 또는 help+web@shop.kr → minjun.kim@example.co.kr, help+web@shop.kr | .co.kr처럼 점이 여러 개인 도메인도 찾습니다. RFC 5322 전체를 검사하지는 않으며, 주소가 진짜인지는 메일을 보내 봐야 압니다. |
| 한글 단어 | [가-힣]+ | g | 안녕하세요 ㅋㅋㅋ Hello 123 → 안녕하세요 | 완성형 한글 음절만 찾습니다. ㅋㅋㅋ 같은 자음·모음만 있는 글자는 빠집니다. |
| 한글 전체(자모 포함) | \p{Script=Hangul}+ | gu | 안녕하세요 ㅋㅋㅋ Hello 123 → 안녕하세요, ㅋㅋㅋ | u 플래그가 꼭 필요합니다. 자음·모음과 옛한글 자모까지 포함합니다. |
| 날짜 YYYY-MM-DD | \b\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])\b | g | 출고 2026-10-16, 반품 2026-13-01 → 2026-10-16 | 월은 01–12, 일은 01–31인지만 봅니다. 2026-02-30도 통과하므로 달력 검사는 따로 하세요. |
개인정보를 로그에 남기기 전에 가리는 데에도 치환이 유용합니다. 패턴 (\d{6})-\d{7}, 바꿀 내용 $1-*******로 ‘홍길동 900101-1234567’을 바꾸면 “홍길동 900101-*******”이 됩니다(예시 번호는 임의로 만든 것입니다).
예시로 보기
입력란의 기본 패턴 (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})는 연-월-일 형식의 날짜를 찾습니다. \d{4}는 숫자 정확히 네 개이고, 각 부분은 year, month, day라는 이름 있는 그룹에 들어갑니다. g 플래그가 있으므로 예시 텍스트에서 날짜 3개를 찾습니다: 2026-10-16(위치 11), 2026-11-15(위치 36), 2026-09-30(위치 58). 위치는 0부터 세므로, 위치 11는 일치한 부분 앞에 11글자가 있다는 뜻입니다. 한글도 한 글자를 1로 셉니다.
찾아 바꾸기에서 바꿀 내용 $<year>년 $<month>월 $<day>일를 쓰면 첫 줄은 “청구서 1042번은 2026년 10월 16일에 발행되었고 납부 기한은 2026년 11월 15일입니다.”가 됩니다. g 플래그를 빼면 첫 번째 날짜만 바뀝니다.
치명적 백트래킹(ReDoS)
일치에 실패하면 엔진은 되돌아가서 패턴이 일치할 수 있었던 다른 방법을 시도합니다. 보통은 그 수가 적지만, (a+)+, (\w*)*, (a|aa)+처럼 반복 안에 반복이 있으면 같은 텍스트를 나누는 방법이 지수적으로 늘어납니다. a 30개 뒤에 ‘!’가 붙은 텍스트에 (a+)+$를 실행하면 엔진은 포기하기 전까지 약 230, 10억 가지가 넘는 방법을 시도하고, a가 하나 늘 때마다 시간이 두 배가 됩니다.
JavaScript에서는 실행 중인 정규식을 멈출 방법이 없어, 많은 테스트 사이트에서는 이런 패턴이 탭 전체를 멈춰 버립니다. 이 도구는 패턴을 별도의 백그라운드 스레드(Web Worker)에서 실행하고 1초가 지나면 중단한 뒤, 이유와 함께 중첩된 반복을 찾아 짚어 줍니다. 서버의 입력 검증에 이런 패턴이 있으면 서비스 거부 공격(ReDoS)의 원인이 되므로, 피하기보다 고치는 것이 좋습니다. (a+)+$ 대신 a+$, .* 대신 구분자를 뺀 [^,]*처럼 각 부분이 한 가지 방법으로만 일치하게 만드세요.
팁과 한계
- 위치는 JavaScript 문자열 인덱스처럼 UTF-16 단위로 셉니다. 한글 음절은 1이지만 대부분의 이모지는 2입니다. u 플래그를 쓰면
.가 이모지를 한 글자로 봅니다. - 입력란 전체를 검사할 때(회원가입 폼 등)는
^…$로 감싸세요. 그렇지 않으면 긴 텍스트의 일부만 맞아도 통과합니다. - 최대 10,000개까지 찾고, 표에는 처음 1,000개, 강조 표시는 처음 100,000자까지 보여 줍니다.
- 추출한 JSON은 JSON 정렬로, URL에 섞인 %EC… 같은 코드는 URL 디코딩으로 풀어 보세요. 글자 수는 글자 수 세기로 잴 수 있습니다.
개인정보
정규식 실행은 모두 브라우저 안에서 이루어지며, 패턴과 텍스트는 업로드되거나 기록되지 않습니다. 다시 방문했을 때 편하도록 마지막 입력을 이 기기에만 저장하고, 링크 복사는 입력값을 링크의 # 뒤에 넣는데 이 부분은 브라우저가 서버로 보내지 않습니다.
자주 묻는 질문
이 정규식 테스트는 어떤 문법을 쓰나요?
ECMAScript 표준에 정의되어 모든 브라우저에 들어 있는 JavaScript 정규식입니다. JavaScript, TypeScript, Node.js에서와 똑같이 동작하며, Java·Python·PHP와는 대부분 같고 다른 점은 위 표에 정리했습니다.
한글만 찾는 정규식은 무엇인가요?
완성된 음절만이라면 [가-힣]+, ㅋㅋ나 ㅠㅠ 같은 자음·모음까지 포함하려면 [가-힣ㄱ-ㅎㅏ-ㅣ]+ 또는 u 플래그와 함께 \p{Script=Hangul}+를 쓰세요. 한글이 아닌 글자를 찾으려면 [^가-힣]입니다.
Python이나 Java에서는 되는데 여기서는 오류가 나요.
대개 JavaScript에 없는 문법 때문입니다. (?P<name>…), a++ 같은 소유 수량자, 원자 그룹, 맨 앞의 (?i), \A와 \Z가 대표적입니다. 오류 메시지가 문제를 짚어 주고, Python·PCRE 문법이면 JavaScript식 표기도 알려 줍니다.
점이나 괄호 같은 특수문자는 어떻게 찾나요?
앞에 백슬래시를 붙입니다. \.는 마침표, \(는 괄호, \$는 달러 기호와 일치합니다. 대괄호 안에서는 대부분 그대로 문자이므로 [.]도 마침표와 일치합니다.
탐욕적(greedy)과 게으른(lazy) 수량자는 어떻게 다른가요?
.* 같은 탐욕적 수량자는 가능한 한 많이 가져가므로 <b>굵게</b>에서 <.*>는 전체와 일치합니다. 뒤에 ?를 붙인 <.*?>는 첫 번째 >에서 멈춰 <b>와 일치합니다.
최종 수정일: 2026년 10월 16일