RevealTheme logo

정규 표현식 테스터

JavaScript 정규 표현식을 임의의 입력에 대해 테스트하세요. 일치 항목, 그룹, 치환 결과를 실시간으로 확인하세요.

0 개 일치

이 도구 사용 방법

  1. 1

    Type your regular expression into the pattern field (no slashes — enter the bare pattern).

  2. 2

    Set the flags in the small field beside it, such as g, i, m, or a combination like gi.

  3. 3

    Paste or type the text you want to search into the large input box below.

  4. 4

    Read the match count and each matched substring with its character index in the results panel; an invalid pattern shows the engine's error message instead.

정규 표현식이란 무엇이며 어떻게 읽나요?

정규 표현식(regex)은 텍스트에서 패턴을 검색하기 위한 작은 도메인 특화 언어입니다. 모든 최신 프로그래밍 언어에는 정규식 엔진이 있습니다. 이 도구는 JavaScript의 네이티브 RegExp를 사용하며, 이는 ECMAScript 2018+ 사양을 따르고 lookbehind 어설션, 명명된 캡처 그룹, Unicode 속성 이스케이프, dotAll 플래그 같은 최신 기능을 지원합니다. 기본 구성 요소는 다음과 같습니다. 리터럴 문자는 자기 자신과 일치합니다(정규식 'gato'는 단어 gato와 일치). 문자 클래스는 집합 중 하나와 일치합니다('[a-z]'는 소문자와 일치). 수량자는 반복을 제어합니다(* 0회 이상, + 1회 이상, ? 0회 또는 1회, {3,5} 3회에서 5회 사이). 앵커는 위치와 일치합니다(^ 문자열 시작, $ 끝, \b 단어 경계). 그룹은 하위 일치 항목을 캡처합니다((gato|perro)는 둘 중 하나와 일치하며 어느 쪽인지 캡처). 대안(alternation)은 선택지를 제공합니다. 정규식은 구조적이지만 문법적이지는 않은 텍스트(로그, 이메일, 전화번호, 단순한 HTML 속성)를 분석하는 데 탁월하지만, 진정으로 재귀적인 구조(완전한 HTML, 중첩된 JSON)에서는 실패합니다. 그런 경우에는 파서를 사용하세요. 이 테스터를 사용하면 즉각적인 피드백을 받으며 패턴을 반복 작업할 수 있습니다. 정규식을 변경하면 키를 누를 때마다 일치 항목이 다시 계산됩니다.

일반적인 사용 사례

  • 서버로 보내기 전에 사용자 입력 형식(이메일, 전화번호, 우편번호)을 검증하세요.

  • 로그 파일에서 구조화된 데이터(타임스탬프, IP, 상태 코드, 요청 경로)를 추출하세요.

  • 에디터의 정규식 검색을 사용하여 수백 개의 파일에 걸쳐 찾아 바꾸기를 수행하세요.

  • Nginx, Apache .htaccess 또는 Vercel 리라이트를 위한 URL 리라이트 규칙을 작성하세요.

  • 본격적인 파서가 과한 경우, 단순한 CSV류 형식을 파싱하세요.

  • HTML <input pattern="..."> 속성을 위한 폼 검증 패턴을 만드세요.

자주 묻는 질문

어떤 플래그가 지원되나요?
g(global: 첫 번째뿐 아니라 모든 일치 항목을 찾음), i(대소문자 구분 안 함), m(multiline: ^와 $가 줄 바꿈과 일치), s(dotAll: .이 줄 바꿈과 일치), u(unicode: 멀티바이트 문자를 올바르게 처리), y(sticky: lastIndex에서만 일치). 플래그를 이어 붙여서 조합합니다. 'gim'은 global + 대소문자 구분 안 함 + multiline을 활성화합니다.
여러 줄에 걸쳐 어떻게 일치시키나요?
두 가지 다른 필요가 있습니다. 'm'은 ^와 $가 줄 바꿈과 일치하도록 합니다(앵커의 관점에서 각 줄을 별도의 문자열로 취급). 's'는 .이 줄 바꿈과 일치하도록 합니다(그렇지 않으면 .은 줄 바꿈을 제외한 모든 것과 일치). 여러 줄에 걸친 패턴을 일치시켜야 한다면 둘을 함께 사용하세요.
탐욕적 수량자와 게으른 수량자의 차이는 무엇인가요?
탐욕적 수량자(*, +, {n,m})는 가능한 한 많이 일치합니다. 게으른 수량자(*?, +?, {n,m}?)는 가능한 한 적게 일치합니다. 고전적인 예: '<a><b>'에 대한 정규식 '<.*>'는 '<a><b>' 전체와 일치하지만, '<.*?>'는 '<a>'만 일치합니다.
정규식을 사용하지 말아야 할 때는 언제인가요?
구조가 진정으로 재귀적일 때(HTML, JSON, 균형 잡힌 괄호)입니다. 모든 경계 사례를 올바르게 처리해야 할 때(시간대가 포함된 날짜 분석, 아포스트로피가 들어간 이름)입니다. 입력의 문법이 잘 정의되어 있고 분석용 라이브러리가 존재할 때입니다. Stack Overflow의 유명한 답변처럼, 정규식은 패턴을 찾는 데는 훌륭하지만 언어를 분석하는 데는 형편없습니다.
명명된 캡처 그룹이란 무엇인가요?
(\d{4})-(\d{2})-(\d{2})가 번호가 매겨진 그룹을 반환하게 하는 대신, (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})를 사용하고 match.groups.year로 일치 항목에 접근하세요. 실제 코드에서 훨씬 유지 관리하기 좋습니다.
왜 제 정규식이 특정 입력에서 느린가요?
치명적 백트래킹(catastrophic backtracking) 때문입니다. (a+)+ 같은 중첩 수량자는 악의적인 입력에 대해 지수 시간이 걸릴 수 있습니다. 중첩 수량자와 겹치는 대안을 피하세요. JavaScript 엔진에는 타임아웃이 없으므로, 잘못된 정규식 하나가 요청을 멈추게 할 수 있습니다. 프로덕션에서는 위험한 패턴을 감지하기 위해 npm 패키지 safe-regex를 사용하세요.
이것이 제 서버의 정규식 엔진이 하는 것과 일치하나요?
대체로 그렇습니다. 주요 정규식 계열(PCRE, Python의 re, Ruby의 regex, Java)은 비슷하지만 미묘한 차이가 있습니다. lookbehind 구문, 문자 클래스의 동작, Unicode 처리가 다릅니다. 프로덕션과의 동등성을 위해서는 대상 언어에서도 테스트하세요.

관련 도구