이메일·전화번호 패턴은 형식을 대략 거르는 용도입니다. 실제로 존재하는 주소·번호인지는 정규식으로 확인할 수 없습니다.
문법 요약
문법
뜻
.
줄바꿈을 뺀 아무 글자 (s 플래그면 줄바꿈 포함)
\d \w \s
숫자, 영문자·숫자·밑줄, 공백 (대문자 \D \W \S는 반대)
[abc] [^abc] [a-z]
문자 집합, 제외 집합, 범위
* + ? {n,m}
0번 이상, 1번 이상, 0~1번, n~m번 (뒤에 ?를 붙이면 최소 일치)
^ $ \b
시작, 끝, 단어 경계
( ) (?: ) (?<이름> )
캡처 그룹, 캡처 안 하는 그룹, 이름 있는 그룹
(?= ) (?! ) (?<= ) (?<! )
뒤에 오는지, 안 오는지, 앞에 있는지, 없는지 (전후방 탐색)
\p{Script=Hangul}
유니코드 속성 (u 플래그 필요)
자주 묻는 질문
정규식 하나 때문에 페이지가 멈출 수도 있나요?
네. (a+)+$ 처럼 반복이 겹친 패턴은 일치하지 않는 입력에서 경우의 수를 폭발적으로 시도하는 "파국적 백트래킹"을 일으켜 몇 분씩 멈출 수 있습니다(ReDoS). 이 도구는 정규식을 별도 작업 스레드(Web Worker)에서 실행하고 2초가 넘으면 강제로 중단해 페이지가 멈추지 않게 합니다. 시간 초과가 나면 반복을 겹치지 않게 패턴을 고쳐야 실제 서비스에서도 안전합니다.
g 플래그를 붙인 정규식의 test()가 true, false를 번갈아 내는 이유는?
g나 y 플래그가 있으면 정규식 객체가 lastIndex에 마지막 일치 위치를 기억하고, 다음 test()를 그 위치부터 검사하기 때문입니다. 같은 문자열을 반복 검사할 때는 g를 빼거나 매번 lastIndex = 0으로 되돌리세요. 이 도구는 매번 처음부터 검사합니다.
한글만 찾으려면 [가-힣]과 \p{Script=Hangul} 중 무엇을 쓰나요?
[가-힣]은 완성형 음절 11,172자만 찾고 ㄱ·ㅏ 같은 낱자는 빠집니다. \p{Script=Hangul}은 낱자와 옛한글까지 포함하며 u 플래그가 있어야 동작합니다. 이름·주소 입력 검사처럼 완성된 글자만 받을 때는 [가-힣], 한글이 섞였는지 판단할 때는 \p{Script=Hangul}이 알맞습니다.
치환할 때 이름 있는 그룹은 어떻게 참조하나요?
(?<year>\d{4})처럼 이름을 붙이면 치환 문자열에서 $<year>로 가져올 수 있습니다. 번호로는 $1, $2, 일치 전체는 $&, 일치 앞뒤 문자열은 $` 와 $', 달러 기호 자체는 $$ 로 씁니다.
여기서는 되는데 자바·파이썬에서는 결과가 달라요.
이 도구는 브라우저의 자바스크립트 정규식 엔진을 그대로 씁니다. 언어마다 지원 문법(예: 소유 수량자 a++, 원자 그룹, 인라인 플래그 (?i))과 \d·\w가 유니코드 숫자를 포함하는지 등이 달라 결과가 다를 수 있습니다. 자바스크립트·타입스크립트·Node.js 코드에는 결과가 그대로 맞습니다.