정규표현식 테스터
정규표현식 패턴과 테스트 문자열을 입력하면 일치하는 부분을 강조 표시하고 캡처 그룹 값을 목록으로 보여줍니다. 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)로만 구성되어 있는지 확인합니다. |
정규표현식 테스터란
정규표현식(Regular Expression)은 텍스트 안에서 특정 패턴을 검색·추출·검증하기 위한 소형 언어입니다. "이 문자열이 이메일 주소 형식인지 확인하고 싶다", "로그에서 IP 주소만 뽑아내고 싶다" 같은 작업을 단 한 줄의 패턴으로 표현할 수 있습니다. 다만 기호 조합이 독특해서, 패턴을 눈으로 읽는 것만으로는 의도한 대로 동작하는지 판단하기 어렵다는 단점이 있습니다.
이 도구는 입력한 정규표현식 패턴과 테스트 문자열을 JavaScript의 RegExp 엔진으로 즉시 평가하여, 일치한 부분을 텍스트 안에서 노란색으로 강조 표시합니다. 또한 캡처 그룹별 값, 전체 일치 개수, 구문 오류 내용도 함께 목록으로 보여주기 때문에, 코드를 작성하거나 실행 환경을 준비하지 않고도 패턴을 조금씩 수정하며 "지금 어디에 일치하는지"를 브라우저 안에서만 확인하는 시행착오 작업을 완결할 수 있습니다.
브라우저의 JavaScript, 폼 검증, Node.js 백엔드에서 정규표현식을 처리하는 것과 동일한 엔진을 클라이언트 측에서 그대로 사용하기 때문에, 여기서 확인한 동작은 실제 코드에 적용했을 때의 동작을 그대로 반영합니다. 까다로운 패턴을 실제 코드에 붙여넣기 전에 빠르게 점검하는 용도로 유용합니다.
정규표현식 테스터 사용법
-
정규표현식 패턴을 입력합니다
상단 입력란에 검증하고 싶은 패턴을 입력합니다. 앞뒤의 슬래시
/ /는 자동으로 붙으므로 패턴 본문만 입력하면 됩니다. - 플래그를 선택합니다 g, i, m, s, u 체크박스 중 필요한 것을 켭니다. 모든 일치 항목을 보고 싶다면 g 플래그를 끄지 마세요.
- 테스트 문자열을 입력합니다 일치시키고 싶은 문장을 아래 텍스트 영역에 붙여넣습니다. 여러 줄에 걸친 문장도 그대로 입력할 수 있습니다.
- 강조 표시와 목록을 확인합니다 입력할 때마다 자동으로 다시 계산되어 일치한 부분이 노란색으로 강조 표시됩니다. 아래 표에서 전체 일치 내용과 캡처 그룹별 값을 하나씩 확인할 수 있습니다.
- 패턴을 조정합니다 일치 개수나 범위가 의도와 다르면 패턴이나 플래그를 직접 수정하면서 결과 변화를 보며 미세 조정합니다.
더 잘 활용하기 위한 팁
- 패턴 입력란 오른쪽에 표시되는
/플래그를 보면 현재 어떤 플래그 조합이 활성화되어 있는지 한눈에 확인할 수 있습니다. ()로 감싼 부분만 캡처 그룹으로 취급됩니다. 그룹 목록을 복잡하게 만들지 않고 조건만 묶고 싶다면 비캡처 그룹(?:...)을 사용하세요.- g 플래그를 켜지 않으면 첫 번째 일치 항목만 찾습니다. 텍스트에 나타나는 모든 위치를 세고 싶다면 반드시 g 플래그를 켜세요.
- "예시 삽입" 버튼을 누르면 이메일 추출 예시 패턴을 불러올 수 있어, 캡처 그룹의 동작을 확인하는 출발점으로 유용합니다.
- 이 도구의 모든 처리는 브라우저 내부에서 완결되며, 입력한 패턴이나 테스트 문자열이 서버로 전송되는 일은 없습니다.
정규표현식 테스터의 활용 사례
폼 유효성 검사 설계
웹 폼의 입력 검증에 사용할 정규표현식을 실제로 적용하기 전에 이곳에서 검증하여, 예상되는 입력(하이픈 유무·전각 문자 혼용 등)이 올바르게 통과하는지, 잘못된 입력이 올바르게 걸러지는지 사전에 확인할 수 있습니다.
서버 로그에서 정보 추출
접속 로그나 오류 로그에서 IP 주소·타임스탬프·상태 코드 등 특정 항목만 추출하는 패턴을, 실제 로그 조각을 붙여넣으며 만들어 볼 수 있습니다.
CSV·텍스트 데이터 정제
표기가 제각각인 전화번호나 날짜 형식을 통일하기 전 단계로, 대상 행이 어떤 패턴과 일치하는지 분류·확인하는 용도로 사용할 수 있습니다.
코드 리뷰 중 동작 확인
다른 사람이 작성한 정규표현식의 의도를 한눈에 읽기 어려울 때, 실제 값을 넣어 일치 범위를 시각화하면 리뷰 중의 의문을 그 자리에서 해소할 수 있습니다.
기존 패턴 수정 시 부작용 점검
기존 정규표현식을 수정할 때, 변경 전후로 같은 테스트 문자열에 대한 동작이 달라지지 않았는지 강조 표시를 통해 눈으로 확인하는 용도에도 적합합니다.
정규표현식 관련 용어집
- 캡처 그룹
- 패턴 중
()로 감싼 부분을 말합니다. 전체 일치 문자열뿐 아니라 그 일부만 따로 꺼내고 싶을 때 사용합니다. 이 도구의 결과 표에서는 그룹1, 그룹2… 처럼 번호로 값이 목록 표시됩니다. - 비캡처 그룹
(?:...)형식으로 쓰는 그룹입니다. 조건을 묶는 목적으로만 괄호를 쓰고 싶을 때 사용하면 캡처 그룹의 번호가 밀리지 않아 결과 목록도 보기 쉽게 유지됩니다.- 후방 참조
- 패턴 안에서 이전에 일치한 캡처 그룹의 내용을 같은 패턴 안에서 다시 사용하는 표기법입니다.
\1처럼 번호로 참조하거나, 이름 붙은 그룹이라면\k<name>으로 참조할 수 있습니다. 같은 단어가 연속되는 부분을 찾을 때 등에 쓰입니다. - 게으른(비탐욕적) 매칭
- 수량자(
*·+등) 바로 뒤에?를 붙이면 가능한 한 짧은 범위로 일치시키려는 동작으로 바뀝니다. 기본값(탐욕적 매칭)은 가능한 한 길게 일치시키려 하므로, HTML 태그 하나만 추출하는 등 범위를 좁히고 싶은 상황에서 이 구분이 중요해집니다. - 전방 탐색·후방 탐색
(?=...)(긍정형 전방 탐색)·(?!...)(부정형 전방 탐색)·(?<=...)(긍정형 후방 탐색)·(?<!...)(부정형 후방 탐색)을 통틀어 부르는 말입니다. 일치 결과에는 포함하지 않으면서 "이 앞뒤에 특정 문자열이 있는지"만 조건으로 걸 수 있습니다.- 문자 클래스
[abc]나[a-z0-9]처럼 대괄호로 감싸, 그 안의 문자 중 하나와 일치시키는 표기법입니다.[^abc]처럼 맨 앞에^를 두면 "포함하지 않음" 조건으로 반전됩니다.- 앵커
- 문자 자체가 아니라 위치만을 지정하는 표기법입니다.
^는 문자열(m 플래그일 때는 각 줄)의 시작,$는 끝,\b는 단어 경계를 나타냅니다. - 플래그
- 정규표현식 전체의 해석 방식을 바꾸는 옵션입니다. 이 도구가 지원하는 g(모두 검색)·i(대소문자 구분 안 함)·m(여러 줄)·s(줄바꿈도 점에 포함)·u(유니코드 대응)의 5종류가 있습니다.
자주 묻는 질문
[abc], \d, +, * 등)은 대체로 공통이지만, 이름 붙은 그룹 표기법이나 전방/후방 탐색 지원 여부, 사용 가능한 플래그 종류는 언어마다 세부적으로 다릅니다. 이 도구는 JavaScript의 RegExp 사양을 따르므로 다른 언어에서의 동작을 보장하지 않습니다.*, +, ?) 앞에 대상이 없거나, 잘못된 문자 클래스를 사용하는 등 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에서 추가된 비교적 새로운 기능입니다. 번호 대신 이름으로 그룹을 참조할 수 있어 패턴이 복잡해질수록 가독성이 크게 향상됩니다. 각 그룹이 무엇을 의미하는지가 중요한 날짜 파싱 같은 경우에 특히 유용합니다.