🔍
정규표현식(Regular Expression, RegExp)
Table of contents
보통 짧게 regex, regexp라고 하고 rational expression이라고 하기도 한다.
regex가 제일 익숙한 듯.
문자열을 다룰때 정말 유용하고 편리하다.
보통 정해놓은 패턴에 맞는지 유효성을 확인하거나 문자열에서 특정 문자를 찾을 때 등에 사용된다.
패턴 구분자
/pattern/
패턴 구분자로 슬래쉬를 사용한다. /
로 시작해서 /
로 끝나고 이 사이에 패턴이 들어간다.
플래그(패턴 변경자)
/pattern/i
패턴 구분자 뒤에 플래그를 설정해서 검색 옵션을 지정한다.
플래그 | 설명 |
---|---|
g | Global, 문자열 내의 모든 패턴을 검색 |
i | Ignore case, 대·소문자를 구분하지 않고 검색 |
m | Multi line, 행이 바뀌더라도 검색 |
u | Unicode, 유니코드 |
메타 문자
패턴안에서 사용하는 메타 문자들
메타 문자 | 설명 |
---|---|
^ | 문자열의 시작 |
$ | 문자열의 종료, 옵션에 따라 문장의 끝 또는 문서의 끝에 매치된다. |
. | 임의의 한 문자 (어떤 문자든 허용) |
` | ` |
? | 앞 문자가 없거나 1회 일치 ({0,1} 과 동일) |
+ | 앞 문자가 1회 이상 반복 일치 |
* | 앞 문자가 0회 이상 반복 일치 |
반복 일치
메타 문자 | 설명 |
---|---|
{n} | 앞 문자가 n 개 연속 일치 |
{n,} | 앞 문자가 n 개 이상 일치 ({0,} 은 * 와 동일, {1,} 은 + 와 동일) |
{n,m} | 앞 문자가 n 개 이상 m 개 이하 일치 (? 와 동일) |
문자 클래스
메타 문자 | 설명 |
---|---|
[] | 대괄호 사이에 존재하는 문자들 중 하나에 일치 (하나의 문자로 취급) |
[-] | 문자와 문자 사이의 일치 |
[^] | ^ 이후에 존재하는 문자들을 제외한 모든 문자와 일치 (not을 의미) |
[a-z]
: 영어 소문자 a 부터 z 까지 일치[A-Z]
: 영어 대문자 A 부터 Z 까지 일치[가-힣]
: 현대 한글 가 부터 힣 까지 일치 (모든 한글)
이스케이프 문자
정규 표현식에서 정의되어 있는 패턴을 사용하거나 특수 기호를 사용할 수 있다.
정의되어 있는 패턴을 대문자로 사용하면 반대를 의미한다.
메타 문자 | 의미 | 설명 |
---|---|---|
\d | digit | 숫자 ([0-9] 과 동일) |
\D | 숫자를 제외한 문자 | |
\w | word | 영 대·소문자, 숫자, _ ([A-Za-z0-9_] 과 동일) |
\W | 63개 문자(영 대·소문자 52개 + 숫자 10개 + _)를 제외한 문자 | |
\s | white space | 공백 문자 (스페이스, 탭 등등 공백 문자) |
\S | 공백 문자를 제외한 문자 | |
\b | word boundary | 단어와 단어 사이의 경계 [참고] |
\B | 단어와 단어 사이의 경계를 제외한 | |
\t | tab | 탭 문자 |
\u | unicode | 유니코드 문자 |
특수 기호를 입력하기 위해선 앞에 \
를 붙여 이스케이프 문자로 사용하면 된다.
캡쳐 그룹
하나의 패턴구분자 안에 서브 패턴 사용으로 사용한다.
메타 문자 | 설명 |
---|---|
() | 캡처할 그룹, 괄호 사이의 문자를 하나의 결과로 그룹화 |
(?:) | 캡처하지 않는 그룹 |
(?=) | 앞쪽 일치 |
(?!) | 부정 앞쪽 일치 |
(?<=) | 뒤쪽 일치 |
(?<!) | 부정 뒤쪽 일치 |
자주 사용하는 정규 표현식
이메일
- /^[\w-]+(\.[\w-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)*?\.[a-z]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?$/
휴대전화(대한민국)
- /^01(0|1|[6-9])(\d{3}|\d{4})(\d{4})$/
- /^01[0|1|6|7|9](\d{3,4})(\d){3,4}$/
비밀번호
최소 6자리에서 12자리 영 대·소문자, 숫자만을 사용
- /^[A-Za-z0-9]{6,12}$/
최소 8 자, 최소 하나의 문자, 하나의 숫자 및 하나의 특수 문자
- /^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$/
마스킹
앞 문자 2개를 제외한 모든 문자
- /(?<=.{2}).+/g
Reference
RegExr - 정규 표현식을 보면서 학습할 수 있다. 아주 유용함
정규표현식(Regular Expression)을 소개합니다.