상세 컨텐츠

본문 제목

정규표현식(Regular Expression, regex)

TECH

by WEB Front-end 개발자 walkinpcm 2021. 4. 14. 20:13

본문

주어진 문자열에서 특정 규칙을 만족하는 모든 문자열을 찾아야하는 경우에는 자연스럽게 정규표현식을 떠올리게 됩니다.

그런데, 생각보다 정규표현식의 규칙을 매번 헷갈려해서 결국 원하는 표현식을 검색하게 되는데요.

 

이제 제대로 익혀 놓기 위해서 정리해봅니다.

 

정규표현식의 구성

정규표현식은 크게 3가지 요소로 구성됩니다.

  1. 정규표현식이라고 표현하는 슬래시(/)
  2. 찾아낼 패턴
  3. 찾을 때 옵션을 줄 수 있는 flag

정규표현식의 구성

 

이 3개 중에서 가장 중요한 부분은 패턴입니다. 패턴을 얼마나 잘 다루냐에 따라서 얼마나 알맞은 문자열을 잘 찾아내느냐를 결정합니다.

 

정규표현식의 패턴

패턴은 아래와 같이 크게 4가지 분류로 나눌 수 있습니다. (모든 문법이 작성되어 있는 것은 아닙니다.)

Group and ranges

문법 의미 상세 설명
  | 또는 패턴을 OR조건으로 연결시킴
  ( ) 그룹 패턴들의 그룹을 지음
  [ ] 문자셋, 괄호안의 어떤 문자든 대괄호 안에 들어있는 모든 문자를 포함하는 문자열을 찾음
  [^] 부정 문자셋, 괄호안의 어떤 문자가 아닐때 대괄호 안에 들어있는 모든 문자를 제외한 문자열를 찾음
  (?:) 찾지만 기억하지는 않음 그룹을 지어서 찾지만 찾아진 문자열에 그룹 정보를 기록하지 않음
  (?=) 해당 패턴을 만족하는 바로 앞의 패턴을 찾음
찾지만 기억하지는 않음
바로 앞에 명시된 패턴을 찾는데, (?=) 그룹 패턴을 만족하는 경우만 찾음

Quantifiers

문법 의미 상세 설명
  ? 없거나 있거나 물음표 앞의 패턴이 있든 없든 상관없이 찾음(optional을 의미함)
단, 있을 때는 1개 있는 경우만 찾음
  * 없거나 1개 이상 별표 앞의 패턴이 있든 없든 상관없이 찾음(optional을 의미함)
물음표와는 다르게 있는 경우에 1개 이상있는 경우를 찾음
  + 1개 이상 플러스 앞의 패턴이 무조건 있는 경우를 찾음
1개 이상 있는 경우 모두 찾음
  {n} n개 있는 앞의 패턴이 정확히 n개 있는 경우를 찾음
  {min,} 최소 min개 있는 앞의 패턴이 최소 min개 있는 경우를 찾음
  {min,max} 최소 min개 있고 최대 max개 있는 앞의 패턴이 최소 min개 있고 최대 max개인 경우를 찾음

Boundary-type

문법 의미 상세 설명
  \b 단어 경계 찾는 패턴이 단어의 처음 또는 끝에 있는지 찾음
ex 1 ) /\bHello/g -> Hello가 단어 처음에 있는 것을 찾음
ex 2 ) /Hello\b/g -> Hello가 단어 끝에 있는 것을 찾음
  \B 단어 경계가 아님 찾는 패턴이 단어의 처음이 아니거나 끝이 아닌 경우를 찾음
  ^ 문장의 시작 찾는 패턴이 문장의 처음에 있는 경우를 찾음
꺽쇠기호는 패턴 앞에 써주어야함.
  $ 문장의 끝 찾는 패턴이 문장의 끝에 있는 경우를 찾음
달러기호는 패턴 뒤에 써주어야함.

Character classes

문법 의미 상세 설명
  \ 특수문자를 일반문자로 인식 문법 키워드로 사용되는 특수문자를 일반 문자로 인식되도록 함
  . 모든 문자 (줄바꿈 문자 제외) 줄바꿈 문자(\n)를 제외한 그 어떠한 문자를 모두 의미함
  \d 숫자 숫자 1개를 의미함
  \D 숫자 아님 숫자가 아닌 문자 1개를 의미함
  \w 문자 문자(word) 1개를 의미함
  \W 문자 아님 문자(word)가 아닌 1개를 의미함
  \s 공백 공백 1개를 의미함
  \S 공백 아님 공백이 아닌 문자 1개를 의미함

 

정규표현식의 flag

  • g(global) : 매칭되는 다수의 결과값을 모두 검색합니다.
  • i(case insensitive) : 대소문자 구분을 하지 않고 검색합니다.
  • m(multiline) : 다중 행 모드를 활성화 합니다. 패턴 문법 중에서 ^ 와 $에 영향을 줍니다. 다중 행 모드에서 ^ 와 $는 전체 문자열의 처음과 끝 뿐 아니라 각 행(각 줄)의 시작과 끝도 검색 범위에 포함됩니다.
  • s(single line) : 줄 바꿈 문자(개행문자, \n)도 문자로 포함 시켜서 검색합니다. 그래서 .(점) 문법을 사용했을 때, 줄 바꿈 문자도 글자로 검색되도록 합니다.
  • u(unicode) : 유니코드를 검색할 수 있게 합니다. (자세한 설명 링크)
  • y(sticky) : 문자열 내의 특정 위치를 검색할 수 있게 합니다.

 

정규표현식의 활용

1. 비밀번호 규칙 검증

// 특수문자, 문자, 숫자 포함 형태의 8~15자리
/^.*(?=^.{8,15}$)(?=.*\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&+=]).*$/

 

2. 이메일 형식 검증

/\S+@\S+\.\S+/

 

3. 전화번호 형식 검증

/^\d{2,3}-\d{3,4}-\d{4}$/

 

참고자료

- 정규표현식 MDN 문서: developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions

- 드림텔러 유투브 영상: youtu.be/t3M6toIflyQ

- 정규 표현식 > 패턴과 플래그 - 모던 JavaScript 튜토리얼: ko.javascript.info/regexp-introduction

관련글 더보기

댓글 영역