/
🔍

정규표현식(Regular Expression, RegExp)

RegExp
Table of contents

보통 짧게 regex, regexp라고 하고 rational expression이라고 하기도 한다.

regex가 제일 익숙한 듯.

문자열을 다룰때 정말 유용하고 편리하다.

보통 정해놓은 패턴에 맞는지 유효성을 확인하거나 문자열에서 특정 문자를 찾을 때 등에 사용된다.

패턴 구분자

/pattern/

패턴 구분자로 슬래쉬를 사용한다. /로 시작해서 /로 끝나고 이 사이에 패턴이 들어간다.

플래그(패턴 변경자)

/pattern/i

패턴 구분자 뒤에 플래그를 설정해서 검색 옵션을 지정한다.

플래그설명
gGlobal, 문자열 내의 모든 패턴을 검색
iIgnore case, 대·소문자를 구분하지 않고 검색
mMulti line, 행이 바뀌더라도 검색
uUnicode, 유니코드

메타 문자

패턴안에서 사용하는 메타 문자들

메타 문자설명
^문자열의 시작
$문자열의 종료, 옵션에 따라 문장의 끝 또는 문서의 끝에 매치된다.
.임의의 한 문자 (어떤 문자든 허용)
``
?앞 문자가 없거나 1회 일치 ({0,1} 과 동일)
+앞 문자가 1회 이상 반복 일치
*앞 문자가 0회 이상 반복 일치

반복 일치

메타 문자설명
{n}앞 문자가 n개 연속 일치
{n,}앞 문자가 n개 이상 일치 ({0,} *와 동일, {1,} +와 동일)
{n,m}앞 문자가 n개 이상 m개 이하 일치 (?와 동일)

문자 클래스

메타 문자설명
[]대괄호 사이에 존재하는 문자들 중 하나에 일치 (하나의 문자로 취급)
[-]문자와 문자 사이의 일치
[^]^ 이후에 존재하는 문자들을 제외한 모든 문자와 일치 (not을 의미)
  • [a-z] : 영어 소문자 a 부터 z 까지 일치
  • [A-Z] : 영어 대문자 A 부터 Z 까지 일치
  • [가-힣] : 현대 한글 가 부터 힣 까지 일치 (모든 한글)

이스케이프 문자

정규 표현식에서 정의되어 있는 패턴을 사용하거나 특수 기호를 사용할 수 있다.

정의되어 있는 패턴을 대문자로 사용하면 반대를 의미한다.

메타 문자의미설명
\ddigit숫자 ([0-9]과 동일)
\D숫자를 제외한 문자
\wword영 대·소문자, 숫자, _ ([A-Za-z0-9_]과 동일)
\W63개 문자(영 대·소문자 52개 + 숫자 10개 + _)를 제외한 문자
\swhite space공백 문자 (스페이스, 탭 등등 공백 문자)
\S공백 문자를 제외한 문자
\bword boundary단어와 단어 사이의 경계 [참고]
\B단어와 단어 사이의 경계를 제외한
\ttab탭 문자
\uunicode유니코드 문자

특수 기호를 입력하기 위해선 앞에 \를 붙여 이스케이프 문자로 사용하면 된다.

캡쳐 그룹

하나의 패턴구분자 안에 서브 패턴 사용으로 사용한다.

메타 문자설명
()캡처할 그룹, 괄호 사이의 문자를 하나의 결과로 그룹화
(?:)캡처하지 않는 그룹
(?=)앞쪽 일치
(?!)부정 앞쪽 일치
(?<=)뒤쪽 일치
(?<!)부정 뒤쪽 일치

자주 사용하는 정규 표현식

이메일

  • /^[\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)을 소개합니다.

정규표현식, 이렇게 시작하자! | HEROPY

정규 표현식 (좀 더) 깊이 알아보기. | by Jitae Kim

RegExp | PoiemaWeb

logo
Things I've Learned