Regex
정규식 테스터
내 텍스트에 대해 정규식을 실시간으로 테스트하세요.
정규식에 대하여
정규식(regex)은 문자열 집합을 표현하는 패턴으로, 텍스트를 검색하거나 검증하거나 추출하는 데 사용됩니다. 이 테스터는 JavaScript의 네이티브 정규식 엔진을 브라우저에서 완전히 실행하므로, 실제 텍스트에 패턴을 적용해 정확히 무엇이 일치하는지 확인할 수 있습니다.
수량자에는 혼동하기 쉬운 두 가지 종류가 있습니다. 탐욕적인 수량자(+, *, {2,5})는 패턴의 나머지가 일치하도록 되돌아가기(백트래킹) 전에 가능한 한 많은 텍스트를 소비하는 반면, 대응하는 게으른 수량자(+?, *?, {2,5}?)는 그 대신 가능한 한 적게 소비합니다. <a><b>에 <.+>를 대응시키면 탐욕적인 매칭은 문자열 전체를 가져가지만, <.+?>는 첫 번째 >에서 멈춥니다. 그룹에도 비슷한 갈림길이 있습니다. (...)는 나중에 참조하기 위해 일치한 텍스트를 캡처하지만, (?:...)는 캡처하지 않고 같은 방식으로 그룹화만 합니다. 그룹화의 우선순위는 필요하지만 그 출력은 필요 없을 때 유용합니다.
사용되는 곳
- 이메일 주소, 전화번호, 우편번호 같은 입력 형식 검증
- 로그 라인이나 비정형 텍스트에서 구조화된 값 추출
- 여러 파일에 걸친 리팩터링을 위한 찾기-바꾸기 패턴 작성
- 패턴이 예상보다 많이, 또는 적게 일치하는 이유 디버깅
자주 묻는 질문
왜 내 패턴이 한 번만 일치하나요?
g(전역) 플래그가 없으면 JavaScript의 정규식 메서드는 첫 번째 일치 후 멈춥니다. 이는 이 도구의 한계가 아니라 실제 코드에서도 나타나는 동작입니다. 모든 일치를 찾으려면 g를 켜세요.
여기에 입력한 내용이 서버로 전송되나요?
아닙니다. 매칭은 JavaScript에 내장된 정규식 엔진을 사용해 브라우저에서 전적으로 실행되며 어디로도 전송되지 않습니다. 이는 의도적으로 느린 "catastrophic backtracking" 패턴에 서버가 노출되는 것도 방지합니다.
특정 패턴에서 페이지가 멈추는 경우가 있는 이유는 무엇인가요?
(a+)+ 와 같이 중첩된 수량자가 있는 특정 패턴은 catastrophic backtracking을 일으킬 수 있으며, 이때 매칭 시간이 입력 길이에 따라 기하급수적으로 늘어납니다. 패턴이 멈춘다면 이 도구가 아니라 패턴 자체가 원인입니다. 더 짧은 테스트 문자열을 시도하거나 중첩된 반복을 피하도록 패턴을 다시 작성해 보세요.
탐욕적인 수량자와 게으른 수량자의 차이는 무엇인가요?
탐욕적인 수량자(+, *, {2,5})는 먼저 가능한 한 많은 텍스트에 일치시키고, 그로 인해 패턴의 나머지가 실패할 때만 되돌아갑니다. 끝에 ?를 붙여 쓰는 게으른 대응판(+?, *?)은 그 대신 가능한 한 적게 일치시키고, 필요할 때만 확장합니다. <a><b>에 대해 탐욕적인 <.+>는 문자열 전체에 일치하지만, 게으른 <.+?>는 첫 번째 >에서 멈춥니다. "가능한 한 짧은 일치"가 정말로 원하는 것이라면 게으른 수량자를 쓰세요.