정규 표현식 테스트 방법
- 슬래시 사이에 패턴을 입력합니다. 슬래시는 직접 넣지 않습니다. 백슬래시는 한 번만 씁니다. 코드의 문자열 리터럴 안에서처럼
\\d가 아니라\d입니다. - 필요한 플래그를 켭니다. 고른 플래그가 닫는 슬래시 뒤에 표시되어, 그 줄이 JavaScript 정규식 리터럴
/pattern/flags와 똑같은 모양이 됩니다. - 예시 텍스트를 테스트 문자열에 붙여 넣습니다. 일치한 부분은 이웃한 결과끼리 구별되도록 두 가지 색으로 번갈아 강조되고, 상태 줄에 개수가 나옵니다.
- 아래 표에서 각 일치 항목의 시작 위치(0부터 셈)와 캡처 그룹의 내용을 확인합니다. 대시(–)는 그 그룹이 해당 일치에 참여하지 않았다는 뜻입니다.
- 필요하면 바꿀 내용을 입력해 전체 텍스트에 찾아 바꾸기를 한 결과를 미리 봅니다. 바꾸기 전후를 줄 단위로 비교하려면 두 텍스트를 텍스트 비교에 붙여 넣으세요.
닫히지 않은 괄호처럼 패턴에 문법 오류가 있으면 결과 대신 브라우저의 오류 메시지가 표시됩니다.
플래그
- g · 전체 검색 – 일치하는 항목을 모두 찾습니다. 끄면 첫 번째 일치만 표시되고, 바꾸기도 첫 번째만 바뀝니다.
- i · 대소문자 무시 –
order가 “Order”와 “ORDER”에도 일치합니다. - m · 여러 줄 –
^와$가 전체 텍스트의 처음과 끝뿐 아니라 각 줄의 처음과 끝에서도 일치합니다. - s · dotAll –
.이 줄바꿈과도 일치합니다. - u · 유니코드 – 이모지처럼 기본 다국어 평면(BMP) 밖의 문자를 한 글자로 다루고,
\p{L}같은 속성 이스케이프를 쓸 수 있게 합니다. 문법이 더 엄격해져서 대충 쓴 이스케이프가 오류가 되기도 합니다.
예시
캡처 그룹과 바꾸기
이 페이지에 처음 들어 있는 패턴 (\w+)@(\w+)\.com은 위치 8에서 [email protected]을, 위치 29에서 [email protected]을 찾고, 그룹은 각각 “alice”/“example”, “bob”/“test”입니다. [email protected]는 .com으로 끝나지 않아 건너뜁니다. 바꿀 내용을 $1 at $2로 하면 “Contact alice at example or bob at test.”가 됩니다.
날짜 형식 바꾸기
패턴 (\d{4})-(\d{2})-(\d{2})에 g 플래그를 켜고 $3/$2/$1로 바꾸면 “Due 2026-11-05, paid 2026-12-01”이 “Due 05/11/2026, paid 01/12/2026”이 됩니다. 이름 있는 그룹 (?<y>\d{4})-(?<m>\d{2})-(?<d>\d{2})와 $<d>.$<m>.$<y>를 쓰면 바꿀 내용만 봐도 뜻이 드러납니다: “05.11.2026”.
탐욕적 일치와 게으른 일치
<b>bold</b> and <i>italic</i>에서 탐욕적인 패턴 <.+>는 줄 전체를 하나로 잡습니다. .+가 가능한 한 많이 가져가기 때문입니다. 물음표를 붙인 <.+?>는 게으른 일치가 되어 태그 네 개를 따로따로 찾습니다.
모든 언어의 글자
\w는 A–Z, a–z, 0–9, 밑줄만 포함하므로 \w+는 “Café Zürich”를 “Caf”, “Z”, “rich”로 쪼개고 서울과 東京은 아예 무시합니다. u 플래그를 켜고 \p{L}+를 쓰면 모든 문자 체계의 단어를 통째로 찾습니다: “Café”, “Zürich”, “서울”, “東京”.
요약표
. | 줄바꿈을 뺀 아무 문자(s 플래그를 켜면 모든 문자) |
|---|---|
\d \w \s | 숫자 · 영문자·숫자·밑줄 · 공백 문자 |
\D \W \S | 위 각각의 반대 |
[abc] [^abc] [a-z] | 나열한 문자 중 하나 · 그 밖의 문자 · 범위 |
* + ? {2,5} | 0회 이상 · 1회 이상 · 있어도 되고 없어도 됨 · 2~5회 |
*? +? | 게으른 버전: 가능한 한 적게 일치 |
^ $ \b | 시작 · 끝 · 단어 경계 |
(…) (?:…) (?<name>…) | 캡처 그룹 · 캡처하지 않는 그룹 · 이름 있는 그룹 |
(?=…) (?!…) (?<=…) | 뒤에 …가 옴 · 뒤에 …가 오지 않음 · 앞에 …가 있음 |
$1 $<name> $& $$ | 바꿀 내용에서: 그룹 1 · 이름 있는 그룹 · 일치한 전체 · $ 글자 자체 |
흔한 함정
- 특수 문자 이스케이프를 잊음.
example.com에서 점은 아무 문자와 일치하므로 “examplexcom”도 걸립니다.example\.com으로 쓰세요. - 빈 일치.
x*처럼 아무것도 없는 것과도 일치할 수 있는 패턴은 모든 위치에서 일치합니다. “abc”에서는 빈 일치가 4개입니다. 개수에는 포함되지만 강조할 글자가 없습니다. - 파국적 백트래킹.
(a+)+$처럼 반복이 중첩된 패턴은 텍스트가 거의 일치할 때 지수적으로 오래 걸려 브라우저 탭이 멈출 수 있습니다. 안쪽 부분을 더 구체적으로 쓰거나 중첩을 없애세요. - 다른 언어도 똑같이 동작한다고 가정함. 이 페이지는 브라우저의 JavaScript 엔진을 쓰므로 결과는 JavaScript·TypeScript의
match,matchAll,replace와 같습니다. Python은 이름 있는 그룹을(?P<name>…)로, 바꿀 내용을\1이나\g<name>로 씁니다. PCRE와 Java는 소유 수량자와 원자 그룹을 지원하지만 JavaScript는 지원하지 않습니다.
자주 묻는 질문
일치 결과는 몇 개까지 보이나요?
최대 10,000개까지 찾아 강조하고, 페이지가 느려지지 않도록 표에는 처음 500개만 나열합니다.
여기서는 일치하는데 내 코드에서는 왜 안 되나요?
대개 이스케이프 때문입니다. JavaScript 문자열 "\d"는 백슬래시가 사라지므로 "\\d"로 쓰거나 정규식 리터럴을 쓰세요. 코드에서 같은 플래그를 쓰는지도 확인하세요.
정규식으로 이메일 주소를 검증할 수 있나요?
대략적으로만 가능합니다. ^[^\s@]+@[^\s@]+\.[^\s@]+$ 같은 간단한 검사로 오타는 걸러지지만, 진짜 확인 방법은 인증 메일을 보내는 것뿐입니다.
여러 줄에 걸쳐 일치시키려면?
[\s\S]를 쓰거나, s 플래그를 켜서 .이 줄바꿈도 포함하게 하세요. 반대로 각 줄을 따로 기준 삼으려면 m을 켭니다.