정규식 테스터

정규 표현식을 온라인에서 테스트하세요. 일치하는 부분을 실시간으로 강조하고 캡처 그룹과 바꾸기 결과를 보여 줍니다. JavaScript 정규식 엔진을 씁니다.

정규 표현식
일치 결과

정규 표현식 테스트 방법

  1. 슬래시 사이에 패턴을 입력합니다. 슬래시는 직접 넣지 않습니다. 백슬래시는 한 번만 씁니다. 코드의 문자열 리터럴 안에서처럼 \\d가 아니라 \d입니다.
  2. 필요한 플래그를 켭니다. 고른 플래그가 닫는 슬래시 뒤에 표시되어, 그 줄이 JavaScript 정규식 리터럴 /pattern/flags와 똑같은 모양이 됩니다.
  3. 예시 텍스트를 테스트 문자열에 붙여 넣습니다. 일치한 부분은 이웃한 결과끼리 구별되도록 두 가지 색으로 번갈아 강조되고, 상태 줄에 개수가 나옵니다.
  4. 아래 표에서 각 일치 항목의 시작 위치(0부터 셈)와 캡처 그룹의 내용을 확인합니다. 대시(–)는 그 그룹이 해당 일치에 참여하지 않았다는 뜻입니다.
  5. 필요하면 바꿀 내용을 입력해 전체 텍스트에 찾아 바꾸기를 한 결과를 미리 봅니다. 바꾸기 전후를 줄 단위로 비교하려면 두 텍스트를 텍스트 비교에 붙여 넣으세요.

닫히지 않은 괄호처럼 패턴에 문법 오류가 있으면 결과 대신 브라우저의 오류 메시지가 표시됩니다.

플래그

  • 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을 켭니다.