정규식 테스터
개발일치 항목 강조와 캡처 그룹으로 JavaScript 정규식을 테스트합니다.
이 페이지에서
정규식 테스터란?#
정규식은 텍스트의 패턴을 기술하는 간결한 표기법입니다. “이메일처럼 보이는 모든 것”, “각 줄의 세 번째 단어”, “따옴표 안에 있지 않은 모든 숫자”. 패턴을 쓰는 것은 일의 절반이고, 나머지 반은 실제 코드에 붙여넣기 전에 그것이 진짜로 무엇에 일치하는지, 사용자 것과 비슷한 텍스트에서 보는 것입니다. 정규식 테스터가 바로 그 일을 하는 페이지입니다.
이 도구는 패턴을 샘플 텍스트에 대해 실시간으로 실행하고, 모든 일치를 제자리에서 강조하며, 각 캡처 그룹을 따로 나열하여 단지 일치했다는 것뿐 아니라 무엇을 캡처했는지 확인할 수 있게 합니다. JavaScript 정규식 엔진(브라우저와 Node가 이미 쓰는 같은 엔진)을 사용하므로, 여기서의 동작이 코드가 할 일과 일치합니다.
사용 방법#
- 왼쪽 상단의 두
/표시 사이에 패턴 을 입력합니다. 슬래시는 직접 입력하지 않습니다. 코드에서 리터럴 정규식이 쓰이는 방식처럼 그려져 있습니다. - 패턴 오른쪽의 작은 상자에 플래그 를 입력합니다. 가장 자주 쓰는 것:
g— 첫 번째만이 아니라 모든 일치를 찾습니다.i— 대소문자 무시.m—^과$가 전체 문자열이 아니라 각 줄의 시작과 끝에 일치합니다.s—.이 줄바꿈에도 일치하게 합니다.u— 패턴을 유니코드로 취급합니다(이모지와 비 ASCII에 중요).
- 아래 상자에 테스트 텍스트 를 붙여넣습니다. 실제 입력과 비슷한 텍스트를 쓰세요. 깔끔한 예시에서는 동작하던 패턴이 더 지저분한 데이터에서는 잘못 동작하곤 합니다.
- 오른쪽의 강조 미리보기 를 읽습니다. 모든 일치가 문맥 속에 제자리 표시됩니다. 그 아래에 각 캡처 그룹이 인덱스, 캡처된 텍스트, 발견된 오프셋과 함께 한 행씩 나열됩니다.
주요 기능#
- 실시간 강조. 모든 일치가 원본 텍스트 대비 제자리에 렌더링되어 경계를 한눈에 볼 수 있습니다. 일치가 공백을 가로질러 달리는 어색한 경우도 포함.
- 그룹별 캡처 목록. 그룹 인덱스, 일치한 부분문자열, 문자 오프셋. 캡처마다 한 행. 패턴에 3~4개 그룹이 있을 때 어느 것이 어느 것인지 알아야 할 때 필수.
- 여러 플래그 동시에.
g,i,m,s,u를 자유롭게 결합합니다(예: 전역, 대소문자 무시, 유니코드 인식의giu). - ReDoS 경고. 일부 패턴 — 보통
(a+)+같은 중첩 수량자 — 은 조작된 입력에 대해 지수적으로 폭발할 수 있습니다. 상태 줄은 일치하는 순간 패턴 자체에 표시를 붙여, 적대적 입력을 만나기 전에 단순화하라고 촉구합니다. 검사는 패턴의 모양을 읽는 것이지 마지막 실행이 얼마나 걸렸는지를 재는 것이 아닙니다. 진짜 재앙적 패턴은 여전히 탭을 잠글 수 있으니 경고에 주의하세요. - 설계상 경계. 입력은 250,000자로 제한되고 일치 목록은 수천 건을 넘으면 늘어나지 않습니다(캡처 패널은 처음 200개 표시). 거대한 파일을 실수로 붙여넣어 조용히 영원히 실행되는 일이 없습니다.
- 왕복 없음. 패턴과 텍스트는 브라우저에서 처리되며 어디로도 전송되지 않습니다.
사용 예#
로그 줄 목록이 있고 HTTP 동사로 시작하는 줄에서 메서드와 경로를 뽑고 싶다고 합시다. 이 패턴을 씁니다.
(\w+)\s+(/[\w/-]+)
플래그 gm으로 다음에 대해 테스트합니다.
GET /api/users
POST /api/login
DELETE /api/users/42
not a log line
PUT /api/items/3-qty
도구는 첫째, 둘째, 셋째, 다섯째 줄을 강조합니다(넷째는 단어 뒤 경로로 시작하지 않습니다). 캡처 목록은 각 일치에 대해 메서드와 경로를 분리해 보고합니다. DELETE는 그룹 1, /api/users/42는 그룹 2이며, 마지막 줄의 경로 그룹이 후행 -qty 세그먼트를 올바르게 포함하는지 확인할 수 있습니다.
FAQ#
어느 정규식 버전을 쓰나요?#
JavaScript의 내장 엔진입니다. String.prototype.match, RegExp.prototype.exec, Node의 정규식 리터럴이 쓰는 같은 엔진입니다. 여기서 동작하는 패턴은 프런트엔드 코드나 Node 서버에서 변경 없이 동작합니다. PCRE, RE2 또는 Rust의 정규식이 아닙니다. PHP나 Go 코드베이스에서 패턴을 복사했다면 의존하기 전에 여기서 테스트하세요.
도구가 가능한 ReDoS에 대해 경고합니다. 무슨 뜻인가요?#
특정 패턴은 적대적 입력에 대해 매우 오래 실행되도록 만들어질 수 있습니다. 고전 예는 (a+)+b를 후행 b가 없는 a 문자열에 일치시키는 것입니다. 공격자는 이를 이용해 정규식 기반 서비스를 서비스거부시킵니다. 경고는 패턴 모양(중첩 수량자, 겹치는 교대)에 대한 정적 읽기이며, 그런 패턴이 일치를 만들어내는 순간 발동하지만 마지막 실행 시간에 기반하지 않습니다. 보이면 패턴을 단순화하세요. 중첩 수량자 제거, 앵커 추가, 또는 대상 엔진이 지원하면 원자 그룹 사용.
패턴이 한 번만 일치하는 이유는?#
아마 g 플래그가 빠져서입니다. g가 없으면 JavaScript 정규식은 첫 번째 일치에서 멈춥니다. 겹치지 않는 모든 발생을 찾으려면 g를 추가하세요.
.은 줄바꿈에 일치하나요?#
기본적으로 아닙니다. .은 줄 종결자를 제외한 모든 문자에 일치합니다. .이 줄바꿈에도 걸치게 하려면(줄바꿈을 포함한 블록에 일치시킬 때 유용) s 플래그(때로 “dotall”이라 불림)를 추가하세요.