정규표현식 테스터

정규표현식 패턴과 테스트 문자열을 입력하면 일치하는 부분을 강조 표시하고 캡처 그룹 값을 목록으로 보여줍니다. g/i/m/s/u 플래그를 지원하며 JavaScript의 네이티브 RegExp를 그대로 사용합니다.

자주 쓰는 정규표현식 패턴 목록

용도 패턴 설명
이메일 주소 ^[\w.+-]+@[\w-]+\.[\w.-]+$ @ 앞뒤에 사용자 이름과 도메인이 있는 간단한 이메일 주소 형식과 일치합니다(완전한 RFC 준수는 아닙니다).
한국 휴대전화 번호 ^01[0-9]-\d{3,4}-\d{4}$ 010-1234-5678과 같이 하이픈으로 구분된 한국 휴대전화 번호 형식과 일치합니다.
URL https?:\/\/[\w.-]+(?:\/[\w\-./?%&=]*)? http:// 또는 https://로 시작하는 URL 문자열을 경로와 쿼리 매개변수까지 포함해 추출합니다.
우편번호 ^\d{5}$ 2015년 개편 이후 사용되는 5자리 한국 우편번호와 일치합니다.
HEX 색상 코드 ^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$ CSS에서 사용하는 전체 #RRGGBB 형식 또는 축약형 #RGB 형식의 색상 코드와 일치합니다.
숫자만 ^[0-9]+$ 문자열 전체가 반각 숫자(0~9)로만 구성되어 있는지 확인합니다.

  • 패턴 입력란 오른쪽에 표시되는 /플래그를 보면 현재 어떤 플래그 조합이 활성화되어 있는지 한눈에 확인할 수 있습니다.
  • ()로 감싼 부분만 캡처 그룹으로 취급됩니다. 그룹 목록을 복잡하게 만들지 않고 조건만 묶고 싶다면 비캡처 그룹 (?:...)을 사용하세요.
  • g 플래그를 켜지 않으면 첫 번째 일치 항목만 찾습니다. 텍스트에 나타나는 모든 위치를 세고 싶다면 반드시 g 플래그를 켜세요.
  • "예시 삽입" 버튼을 누르면 이메일 추출 예시 패턴을 불러올 수 있어, 캡처 그룹의 동작을 확인하는 출발점으로 유용합니다.
  • 이 도구의 모든 처리는 브라우저 내부에서 완결되며, 입력한 패턴이나 테스트 문자열이 서버로 전송되는 일은 없습니다.

자주 묻는 질문

g(global) 플래그가 없으면 정규표현식은 문자열에서 첫 번째 일치 항목만 찾고 이후의 항목은 무시합니다. 모든 일치 항목을 찾으려면 반드시 g 플래그를 켜야 합니다.

기본 문법([abc], \d, +, * 등)은 대체로 공통이지만, 이름 붙은 그룹 표기법이나 전방/후방 탐색 지원 여부, 사용 가능한 플래그 종류는 언어마다 세부적으로 다릅니다. 이 도구는 JavaScript의 RegExp 사양을 따르므로 다른 언어에서의 동작을 보장하지 않습니다.

아니요. 모든 처리는 브라우저 내 JavaScript에서 완결되며, 입력한 내용이 toolbase.cc 서버로 전송되거나 저장되는 일은 없습니다.

괄호를 닫지 않았거나, 수량자(*, +, ?) 앞에 대상이 없거나, 잘못된 문자 클래스를 사용하는 등 JavaScript의 RegExp 생성자가 구문 오류로 판단한 경우에 표시됩니다. 오류 메시지에 힌트가 포함되어 있으니 괄호의 짝과 특수 문자 이스케이프(\.\( 등)를 확인하세요.
ツールくん

여담 ― 정규표현식 엔진 내부에서 일어나는 일

정규표현식은 1950년대 수학자 스티븐 클레이니(Stephen Kleene)가 제안한 "정규 언어" 이론에서 유래했습니다. 초기 유닉스의 텍스트 편집기 ed와 명령어 grep(globally search a Regular Expression and Print의 줄임말)이 이 이론을 실용적인 구현으로 받아들이면서 텍스트 처리 도구에 빠르게 확산되었습니다. grep이라는 이름 자체가 정규표현식 조작 명령에서 비롯되었다는 점이 상징적입니다.

JavaScript의 RegExp 엔진은 내부적으로 "백트래킹"이라는 전략으로 매칭을 수행합니다. 패턴의 각 요소를 순서대로 시도하다가 이후 단계에서 실패하면 한 걸음 물러나 다른 대안을 시도하는 방식입니다. 이 방식은 유연한 반면, (a+)+b와 같은 패턴이 일치하지 않는 긴 문자열과 결합되면 시도 횟수가 기하급수적으로 늘어나는 "치명적 백트래킹(catastrophic backtracking)"을 일으켜 브라우저나 서버를 멈추게 할 수 있습니다. 복잡한 패턴을 실제 서비스에 사용하기 전에는 반드시 다양한 입력으로 테스트해야 합니다.

전역(g) 플래그가 붙은 정규표현식 객체는 내부적으로 lastIndex라는 커서를 유지하며, exec()를 호출할 때마다 그 위치부터 검색을 재개합니다. 동일한 정규표현식 객체를 서로 관련 없는 검색에 재사용하면 이 커서가 의도치 않게 남아있을 수 있으므로, 이 도구는 매번 새로운 RegExp 인스턴스를 생성해 이러한 상태 이월을 방지합니다.

이름 붙은 캡처 그룹((?<name>...))은 ECMAScript 2018에서 추가된 비교적 새로운 기능입니다. 번호 대신 이름으로 그룹을 참조할 수 있어 패턴이 복잡해질수록 가독성이 크게 향상됩니다. 각 그룹이 무엇을 의미하는지가 중요한 날짜 파싱 같은 경우에 특히 유용합니다.

→ 모든 여담 보기