현재 언어: 한국어 영어로 보기

정규식 테스터

JavaScript 정규식을 실시간으로 테스트하세요. 일치 부분이 강조되고 캡처 그룹까지 바로 볼 수 있어요.

/ /

강조된 일치 결과

 

일치 결과와 그룹

  1. 위 입력창에 정규식 패턴을 입력하세요. 양쪽 슬래시(/)는 감싸지 않아도 됩니다.
  2. 원하는 플래그를 켜세요. g는 모든 일치, i는 대소문자 무시 등.
  3. 테스트할 문자열을 "테스트 문자열" 상자에 붙여 넣거나 입력하세요.
  4. 일치 부분이 실시간으로 강조돼요. 아래 표에서 캡처된 그룹을 확인할 수 있어요.
어떤 도구인가요?

이 테스터는 브라우저에 내장된 RegExp 엔진으로 패턴을 실행합니다 — Node.js, Deno, 그리고 모든 브라우저가 쓰는 엔진과 같아요. 일치 부분은 그대로 하이라이트되고, 번호가 붙은 그룹과 이름이 붙은 그룹 모두 표로 뽑아 줘서 각 괄호가 무엇을 잡았는지 한눈에 볼 수 있어요.

예시

패턴 (플래그 g 포함):

\b(\w+)@(\w+\.\w+)\b

테스트 문자열:

Contact us at [email protected] or [email protected]. Not an email: foo@bar (no TLD).

일치:

1  [email protected]        $1: hello    $2: example.com
2  [email protected]   $1: support  $2: happycoder.dev

foo@bar 는 \w+\.\w+ 가 도메인에 점을 요구하기 때문에 매치되지 않아요.

왜 내 정규식이 매치되지 않을까?

  • g 플래그를 깜빡했어요. g 플래그가 없으면 첫 번째 일치만 반환돼요. /cat/.exec("cat cat") 은 "cat" 하나만 찾지만 /cat/g 는 둘 다 찾아요.
  • 메타 문자를 이스케이프하지 않았어요. example.com 은 examplexcom 도 매치해요 — . 은 아무 문자나 매치하기 때문이에요. \ 로 이스케이프하세요: example\.com.
  • 탐욕 매칭이 너무 많이 먹어요. <a><b> 에 <.*> 를 쓰면 전체를 잡아버려요. 지연(lazy) 버전 <.*?> 나 부정 클래스 <[^>]*> 를 써서 첫 > 에서 멈추게 하세요.
  • 단어 경계가 헷갈려요. \b 는 단어 문자와 비단어 문자 사이의 위치예요. \bfoo-bar\b 같은 패턴은 - 자체가 이미 중간의 비단어 경계라서 실패합니다.
  • 대소문자가 안 맞아요. [a-z]+ 로는 Hello 가 매치되지 않아요. i 플래그를 켜거나 [A-Za-z]+ 로 바꾸세요.
  • 여러 줄에서의 ^ / $. m 플래그가 없으면 ^ 와 $ 는 전체 문자열의 시작/끝에만 붙어요. 로그를 줄 단위로 훑으려면 m 플래그를 켜세요.
자주 묻는 질문

이 테스터는 어떤 정규식 문법을 쓰나요?

JavaScript (ECMAScript) 정규식을 씁니다. 브라우저에 내장된 RegExp 엔진을 그대로 사용해요. PCRE (PHP, Perl), Python의 re 모듈, POSIX 정규식과는 몇 가지 차이가 있어요: 재귀 없음, 소유격 수량자 없음, 이름 있는 그룹은 (?P<name>...) 대신 (?<name>...) 형식이고, \d 같은 문자 클래스 단축표기는 u 플래그를 켜지 않으면 ASCII 범위에만 해당돼요.

룩비하인드(lookbehind)를 지원하나요?

네, 지원해요. (?<=foo)bar 와 (?<!foo)bar 같은 룩비하인드 단언은 ES2018에 추가됐고, 최신 Chromium, Firefox, Safari에서 모두 동작해요. 프로덕션에서 아주 오래된 브라우저까지 노려야 한다면 caniuse 를 확인하세요 — 이 테스터 자체에서는 문제없이 돌아갑니다.

g, i, m, s, u 플래그는 무슨 뜻인가요?

g 는 첫 번째만이 아닌 모든 일치를 찾아요. i 는 대소문자를 구별하지 않아요. m 은 ^ 와 $ 를 문자열 전체가 아니라 각 줄의 시작/끝에 맞춥니다. s (dotall) 는 . 이 개행 문자도 매치하게 해요. u 는 전체 유니코드 처리와 더 엄격한 이스케이프 파싱을 켭니다. 필요한 것만 고르세요 — 특히 g 는 매치 개수를 크게 바꿔요.

탐욕 수량자가 너무 많이 잡는데요?

*, +, {n,} 같은 수량자는 기본적으로 탐욕적이에요 — 가능한 한 많이 잡은 뒤, 뒤쪽 패턴이 실패할 때만 뒤로 물러납니다. ? 를 붙여 지연(lazy) 매칭으로 바꾸세요: .*? 는 최소한만 잡아요. <a>.*</a> 가 여러 태그를 삼키는 흔한 문제는 <a>.*?</a> 나 부정 클래스 <a>[^<]*</a> 로 해결합니다.

캡처한 그룹을 패턴이나 치환 문자열에서 어떻게 참조하나요?

패턴 안에서는 \1, \2 로 앞 그룹이 잡은 같은 텍스트를 다시 매치해요 — (\w+)\s+\1 은 반복된 단어를 잡아요. 치환 문자열(이 라이브 테스터에는 없지만 String.replace 에서)에서는 $1, $2 를 씁니다. 이름 있는 그룹은 패턴에서 \k<name>, 치환에서 $<name> 예요.

패턴에 점, 슬래시, 괄호가 들어가면 왜 깨지나요?

이들은 정규식 메타문자예요. 문자 그대로 매치하려면 역슬래시로 이스케이프하세요: 점은 \., 슬래시는 \/ ( new RegExp 문자열에서는 선택, /.../ 리터럴 사이에서는 필수), 괄호는 \( \) 입니다. 특수문자는 . * + ? ^ $ { } ( ) | [ ] \ — 이들 중 어느 것이든 리터럴로 쓰려면 이스케이프가 필요해요.

여기에 입력하는 정규식이나 테스트 텍스트를 저장하나요?

아니요. 입력하신 패턴이나 테스트 대상 텍스트는 저장하지 않습니다. 탭을 닫거나 새로고침하는 순간 모두 사라져요 — 로그도, 무엇을 매치했는지에 대한 기록도 남지 않아요. 브라우저 개발자 도구에서 직접 확인하실 수 있습니다.