타이핑하는 즉시 매칭 결과를 보여주는 정규식 테스터. JavaScript(ECMAScript) 문법 기준.
/ … / 사이 입력칸에 패턴을 씁니다. 슬래시는 따로 입력하지 않아도 됩니다.g i m s u를 켜고 끕니다(기본은 g).@index)와 캡처 그룹 $1, 이름 그룹 <name> 값을 확인합니다.String.replace 결과를 바로 미리 봅니다.정규표현식(Regular Expression)은 "이런 모양의 문자열"을 기호로 표현한 패턴입니다. 이메일·전화번호 형식 검사, 로그에서 특정 줄 뽑기, 대량 찾아 바꾸기 등에 씁니다. 이 테스터는 브라우저의 RegExp를 그대로 쓰므로 JavaScript(ECMAScript) 문법 기준이며, Python이나 Java와는 일부 문법이 다를 수 있습니다.
| 플래그 | 이름 | 효과 |
|---|---|---|
g | global | 모든 일치를 찾음 (끄면 첫 번째만) |
i | ignore case | 대소문자 무시 |
m | multiline | ^ $가 각 줄의 시작·끝에 일치 |
s | dotAll | .이 줄바꿈까지 포함 |
u | unicode | 이모지 등 서로게이트 쌍을 한 글자로, \p{…} 사용 |
01[016789]-?\d{3,4}-?\d{4}^[가-힣]+$ (자음·모음 단독 문자는 제외됨)\s{2,}, 치환 " "(\d{4})-(\d{2})-(\d{2}), 치환 $3/$2/$1예를 들어 test string에 주문 2025-10-05, 배송 2025-10-07을 넣고 패턴 (\d{4})-(\d{2})-(\d{2}), 플래그 g, 치환 $3/$2/$1을 쓰면 매칭 2개(@3, @18)가 잡히고 replace 결과는 주문 05/10/2025, 배송 07/10/2025이 돼요. 첫 매칭의 그룹은 $1=2025, $2=10, $3=05예요.
치환 문자열에서는 $1(번호 그룹), $<name>(이름 그룹), $&(일치 전체)를 쓸 수 있습니다.
패턴 옆 copy 버튼은 /패턴/플래그 형태의 리터럴을 복사하므로 JavaScript 코드에 바로 붙여넣을 수 있고, replace 패널의 copy는 치환이 끝난 전체 텍스트를 복사합니다. 문법이 틀리면 패턴 아래에 브라우저의 오류 메시지가 빨간색으로 표시됩니다.
표에는 최대 200개 매칭까지, 개수는 5,000개까지 셉니다. 빈 문자열에 일치하는 패턴(예: a*)은 개수에는 잡히지만 하이라이트되지 않습니다. 중첩 반복((a+)+ 같은 형태)은 긴 텍스트에서 브라우저를 멈추게 할 수 있으니 주의하세요.
| 목적 | 패턴 · 플래그 | 테스트 문자열 | 결과 |
|---|---|---|---|
| ① 이메일 뽑기 (sample 버튼) | (?<user>[\w.-]+)@(?<domain>[\w-]+\.[\w.]+) · g | 4줄 (smith@lab.dev, noreply@github.com, hello@world, dev.team@smith-94.io) | 3개 매칭 (@4, @25, @67). 점이 없는 hello@world는 제외. 치환 $<user> [at] $<domain> → smith [at] lab.dev |
| ② 탐욕 vs 게으른 수량자 | <.*> 와 <.*?> · g | <b>굵게</b>와 <i>기울임</i> | 탐욕은 전체 1개, 게으른 쪽은 <b> </b> <i> </i> 4개 |
| ③ 줄마다 휴대폰 번호 검사 | ^01[016789]-?\d{3,4}-?\d{4}$ · gm | 010-1234-5678 / 01098765432 / 02-123-4567 / 010-12-3456 | 앞의 2줄만 매칭. m을 끄면 0개 — ^ $가 전체 문자열 처음·끝만 보기 때문 |
③처럼 여러 줄 목록을 한 번에 검사할 때는 m 플래그가 꼭 필요해요. 반대로 입력칸 하나를 검사하는 폼 검증에서는 m을 빼야 "정상 번호⏎아무 글자"처럼 줄을 바꿔 끼운 값이 통과하지 않아요.
| 분류 | 문법 | 뜻 | 예 |
|---|---|---|---|
| 문자 클래스 | \d \w \s | 숫자 0~9 · 영문·숫자·밑줄 · 공백류 | JS의 \d는 아라비아 숫자만 (아랍 숫자 ١٢٣은 제외) |
| 수량자 | * + ? {n,m} | 0개 이상 · 1개 이상 · 0~1개 · n~m개 | \d{3,4} = 숫자 3~4개 |
| 게으른 수량자 | *? +? | 가능한 한 짧게 | 예시 ② 참고 |
| 그룹 | ( ) (?: ) (?<이름> ) | 캡처 · 캡처 안 함 · 이름 붙은 캡처 | 치환에서 $1, $<이름> |
| 앞뒤 조건 | (?=) (?!) (?<=) (?<!) | 뒤에 오는 것 · 안 오는 것 · 앞에 있는 것 · 없는 것 | (?<=₩)[\d,]+ → ₩12,000에서 12,000만 |
| 경계 | ^ $ \b | 시작 · 끝 · 단어 경계 | \b는 한글 사이에서는 기대대로 동작하지 않아요 (한글이 \w가 아니라서) |
전체 문법은 MDN 정규 표현식 안내서가 이 테스터와 같은 JavaScript 기준이라 가장 정확해요. 기초부터 차근차근 보려면 정규식 기초 치트시트를, 성능 문제는 탐욕·게으른 수량자와 ReDoS를 참고하세요.
| 항목 | JavaScript (이 테스터) | Python re | Java |
|---|---|---|---|
| 이름 그룹 | (?<name>…) | (?P<name>…) ((?<name>…)로 쓰면 오류) | (?<name>…) |
인라인 플래그 (?i) | 안 됨 (플래그로 지정) | 됨 | 됨 |
\d 범위 | 0~9만 | 유니코드 숫자 전체 (١٢٣도 매칭) | 0~9 (기본) |
소유 수량자 a++ | 없음 | 3.11부터 지원 | 지원 |
| 치환 그룹 참조 | $1 | \1 또는 \g<1> | $1 |
파이썬으로 같은 문자열 가격 ١٢٣ 와 123에 \d+를 쓰면 두 개(١٢٣, 123)가 잡히지만, 여기서는 123 하나만 잡혀요. 다른 언어로 옮길 때 이런 차이로 결과가 달라질 수 있어요.
\d{4}로 비밀번호 4자리를 검사하면 abc12345도 통과해요. 형식 검증은 ^\d{4}$처럼 처음과 끝을 묶어야 해요. 자세한 함정은 정규식 검증에서 자주 틀리는 것에 정리했어요.ㅋㅋㅋ 같은 자모는 빠져요. 자모까지 넣으려면 [가-힣ㄱ-ㅎㅏ-ㅣ]를 써요.\d로 테스트한 패턴을 new RegExp("\d")로 옮기면 d가 돼요. 문자열 안에서는 "\\d"처럼 두 번 써야 해요. 리터럴 /\d/는 그대로 써도 돼요.g 플래그 객체를 재사용 — JS에서 /x/g.test()를 반복 호출하면 lastIndex가 남아 결과가 번갈아 true/false가 돼요. 검증용에는 g를 빼요.g 플래그가 꺼져 있으면 첫 번째 일치에서 멈춥니다. 플래그 영역에서 g를 체크하세요. 여러 줄에서 ^, $를 쓴다면 m도 필요합니다.(?P<name>…), JavaScript가 (?<name>…)로 다르고, 인라인 플래그 (?i)는 JavaScript에서 쓸 수 없습니다.*, +는 기본적으로 탐욕적(greedy)이라 가능한 한 길게 잡습니다. 뒤에 ?를 붙인 .*?(lazy)를 쓰면 가장 짧은 일치를 찾습니다.\., \(, \$. 대괄호 안에서는 [.]처럼 대부분 그대로 써도 됩니다.