정규식 테스터
자바스크립트 정규식을 실시간으로 테스트하고 매치 강조와 치환 미리보기를 확인하세요.
- #1 @14jane@example.com
- #2 @34john@test.io
Contact me at [redacted] or [redacted] for details.
사용법
- 정규식 패턴을 입력하세요(슬래시 없이).
- 플래그를 토글하세요: g(전역), i(대소문자 무시), m(다중행), s(dotall), u(유니코드).
- 테스트 문자열을 입력/붙여넣으면 매치가 강조됩니다.
- 치환 문자열을 입력해 결과 미리보기를 확인하세요.
자세한 설명
펼치기접기
패턴을 쓰고 플래그를 켜면, 입력하는 동안 테스트 문자열 안의 모든 일치가 표시됩니다. 일치마다 캡처 그룹이 나열되고 치환 미리보기가 함께 돌아가므로, 패턴이 무엇을 찾아내는지와 무엇을 만들어 낼지를 둘 다 확인할 수 있습니다. 엔진은 브라우저 자체의 자바스크립트 RegExp이므로, 여기서 보는 것이 곧 여러분의 코드가 할 일입니다. 그리고 아무것도 페이지 밖으로 나가지 않는데, 디버깅하는 표본이 실제 데이터일 때 이 점이 중요합니다.
진짜 자바스크립트 엔진이라는 말은 그 특유의 성격까지 물려받는다는 뜻이기도 합니다. \d는 아스키 숫자 0부터 9까지만 일치시키므로, 아무 숫자나 받을 것처럼 보이는 패턴이 아라비아-인도 숫자 문자열에서는 실패합니다. 그쪽까지 받는 것은 u 플래그와 함께 쓰는 \p{Nd}입니다. 점은 s 플래그를 켜지 않는 한 줄바꿈을 건너뜁니다. \A나 \z는 없습니다. 문자열 전체에 고정하려면 m 없이 ^와 $를 씁니다. 후방탐색은 요즘 브라우저에서 동작하지만 늦게 들어왔기 때문에, 여기서는 통과하는 패턴이 오래된 기기에서는 실패할 수 있습니다.
패턴을 다른 언어로 옮기기 전에는 이식성을 확인할 가치가 있습니다. 고의 표준 라이브러리는 RE2를 쓰는데, 설계상 역참조도 전후방탐색도 아예 없습니다. 여기서 완벽하게 동작하는 패턴이 그쪽에서는 그냥 거부됩니다. 파이썬과 PCRE는 자바스크립트보다 더 많은 것을 받아들여서 원자 그룹과 소유 수량자까지 지원하므로, 반대 방향으로 복사한 패턴은 오류를 내는 대신 조용히 다르게 동작할 수 있습니다.
정말로 두려워해야 할 실패 양상은 파국적 역추적입니다. 겹치는 선택지 위에 수량자가 중첩된 패턴은, 거의 일치하는 입력에 대해 지수 시간을 쓸 수 있습니다. /^(a+)+b$/를 a 스물여덟 개 뒤에 x가 붙은 문자열에 시험하면 이 엔진에서 수 초가 걸리고, 글자 하나가 늘 때마다 대략 두 배가 됩니다. 서버에서라면 짧은 요청 하나로 서비스 거부가 되는 셈이고, 이 패턴 부류에 따로 이름이 붙어 있는 이유가 그것입니다. 정규식 안에 수량자가 또 다른 수량자를 품고 있다면, 배포하기 전에 길고 아슬아슬하게 빗나가는 입력으로 시험해 보세요. 이 페이지가 그것을 알아내기에 좋은 자리입니다.
자주 묻는 질문
어떤 정규식 문법을 쓰나요?
자바스크립트(ECMAScript) 정규식입니다. 최신 브라우저에서는 lookbehind, 이름 그룹, 유니코드 속성 이스케이프도 지원됩니다.
치환에서 캡처 그룹 참조는?
$1, $2, 전체 매치는 $&, 이름 그룹은 $<name> 형식을 사용하세요.
매치 제한이 있나요?
UI 반응성을 위해 최대 10,000회 반복까지 캡처하며, 매치 목록에는 50개까지 표시합니다.
데이터가 전송되나요?
아니요. 패턴과 테스트 문자열은 브라우저에서만 실행되며 자동 저장은 로컬 저장소에만 보관됩니다.
패턴을 넣으면 페이지가 멈추는 이유는?
거의 확실히 파국적 백트래킹입니다. (a+)+b 같은 식으로 수량자를 중첩하면, 엔진이 일치가 없다고 인정하기 전까지 입력을 쪼개는 경우의 수를 지수적으로 훑게 됩니다. 해결책은 안쪽을 모호하지 않게 만드는 것이고, 보통 탐욕적인 .* 를 구분자와 겹칠 수 없는 부정 문자 클래스로 바꿉니다.
전역(g) 플래그는 실제로 무엇을 바꾸나요?
g가 없으면 첫 결과에서 매칭이 멈춥니다. g가 있으면 문자열 전체로 탐색이 이어지며, 일치 목록이 하나보다 길어지는 이유가 이것입니다. 동시에 실제 코드에서는 정규식이 상태를 갖게 됩니다 — 어디서 멈췄는지를 기억하기 때문입니다. 반복문에서 재사용한 패턴이 한 칸씩 건너뛰는 것처럼 보이는 흔한 원인이 바로 그것입니다.
여러 줄에 걸쳐 매칭하려면?
서로 다른 두 플래그가 관여하고 혼동하기 쉽습니다. multiline은 앵커의 의미를 바꿔 ^와 $가 문자열 양 끝뿐 아니라 모든 줄바꿈에서도 일치하게 합니다. dotAll은 점이 무엇에 일치하는지를 바꿔 줄바꿈까지 포함하게 합니다. 패턴이 첫 줄 끝에서 멈춘다면 대개 필요한 것은 dotAll입니다.
이 주제의 가이드
관련 도구
Glob 패턴 테스터
파일 경로를 glob 패턴(*, **, ?, [...], {a,b})에 대해 브라우저에서 테스트합니다.
개발
찾기·바꾸기
텍스트 블록 검색·치환. 선택적 정규식 + global·대소문자·multiline·dotAll 플래그. 실시간 매치 수.
텍스트
문자열 이스케이프 변환기
한 입력으로 10개 컨텍스트 이스케이프 출력 — JavaScript, JSON, HTML 엔티티, URL, SQL, regex, Bash(단·이중 따옴표), C 문자열, Unicode \u. 필요한 것을 복사.
개발
수식 평가기
일반 수학 함수로 산술 식 평가 — sqrt·sin·log·pow·min/max·상수 pi·e·tau.
수학·통계
CSS 선택자 테스터
HTML에 대해 CSS 선택자를 테스트하고 어떤 요소가 매칭되는지 정확히 확인합니다. 브라우저에서 동작합니다.
개발
.gitignore 테스터
.gitignore와 경로 목록을 붙여넣으면 어떤 경로가 무시되는지, 그리고 몇 번째 줄이 그렇게 결정했는지 git check-ignore -v처럼 보여줍니다.
개발
Cron 식 설명기
Cron 식을 자연어 설명으로 풀이하고 각 필드를 분해해서 보여 줍니다.
개발