정규식
테스터
정규식을 실시간으로 테스트하고 매칭 결과를 확인하세요
정규식(Regex)이란?
정규식(Regular Expression)은 문자열에서 특정 패턴을 찾거나 검증하는 문자 패턴입니다. 이메일, 전화번호, URL 형식 검증, 문자열 추출 등에 활용됩니다.
활용 예시
- 이메일 검증: /^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,}$/ — 이메일 형식 확인
- 한국 휴대폰: /01[016-9]-?\d{3,4}-?\d{4}/ — 010-1234-5678 형식 검출
- URL 추출: /https?:\/\/[^\s]+/gi — 텍스트에서 URL 전체 추출
- 날짜 파싱: /\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])/ — YYYY-MM-DD 검증
- HTML 태그 제거: /<[^>]*>/g — 마크업 스트립
- 연속 공백 정리: /\s+/g → 공백 단일화
자주 묻는 질문
Q. g 플래그는 무엇인가요?
A. global 플래그로 문자열 전체에서 패턴과 일치하는 모든 항목을 찾습니다. g 없이는 첫 번째 일치만 반환합니다.
Q. 한글을 매칭하는 정규식은?
A. [가-힣]+ 를 사용하면 한글 문자를 매칭할 수 있습니다.
Q. 이메일 유효성 검사 정규식은?
A. 프리셋에서 "이메일"을 클릭하면 바로 적용됩니다.
Q. 정규식 특수문자를 그대로 매칭하려면?
A. 백슬래시로 이스케이프합니다. 예) 점(.)을 매칭하려면 \. 을 사용합니다.
Q. i 플래그는 무엇인가요?
A. ignoreCase 플래그로 대소문자를 구분하지 않고 매칭합니다. /hello/i 는 Hello, HELLO, hello 모두 일치합니다.
Q. 수량자(quantifier)란?
A. 패턴 반복 횟수를 지정합니다. * (0회 이상), + (1회 이상), ? (0 또는 1회), {n} (정확히 n회), {n,m} (n~m회). 예) \d{3}은 숫자 3자리.
Q. 캡처 그룹과 비캡처 그룹의 차이는?
A. (abc)는 캡처 그룹으로 일치한 내용을 $1 등으로 참조합니다. (?:abc)는 비캡처 그룹으로 그룹화만 하고 참조하지 않아 성능에 유리합니다.
Q. 룩어헤드(lookahead)란?
A. 특정 패턴 뒤에 오는 조건으로 매칭을 제한합니다. (?=...)는 긍정 룩어헤드, (?!...)는 부정 룩어헤드. 예) \d+(?=원)은 '원' 앞의 숫자만 매칭.
Q. m(multiline) 플래그는 어떻게 작동하나요?
A. m 플래그를 사용하면 ^와 $가 문자열 전체의 시작/끝이 아닌 각 줄의 시작/끝과 매칭됩니다. 여러 줄에 걸친 텍스트에서 줄별로 검증할 때 유용합니다. 예) /^\d+$/m는 여러 줄 중 숫자만 있는 줄을 찾습니다.
Q. 정규식으로 문자열을 치환(replace)하는 방법은?
A. JavaScript: str.replace(/패턴/g, 치환값) 또는 str.replaceAll(). 캡처 그룹 참조는 $1, $2로. 함수형 치환: replace(/패턴/g, (match, g1) => g1.toUpperCase()). 예) "hello world".replace(/(\w+)/g, match => match.toUpperCase()).
Q. 정규식과 입력값 보안에 주의할 점은?
A. 사용자 입력을 정규식에 직접 삽입하면 ReDoS(정규식 서비스 거부) 공격에 취약합니다. 반드시 특수문자를 이스케이프하세요: str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"). 또한 정규식 자체를 사용자가 입력하게 허용할 때는 실행 시간 제한을 두세요.
Q. 정규식 플래그 u(unicode)는 언제 사용하나요?
A. u 플래그는 유니코드 완전 지원 모드로, 이모지·4바이트 문자(서로게이트 페어)를 올바르게 처리합니다. /./u 는 이모지 하나를 하나의 문자로 인식합니다. /./없이는 이모지가 두 코드 유닛으로 분리됩니다. 유니코드 속성 이스케이프 \p{Letter}도 u 플래그와 함께 사용합니다.