[JavaScript] 정규 표현식

wonyu·2022년 7월 28일

정규 표현식이란?

문자열에서 특정 문자 조합을 찾기 위한 패턴이다.
JavaScript에서 정규 표현식은 하나의 객체로서, RegExp의 exec(), test() 메서드와 String의 match(), matchAll(), replace(), replaceAll(), search(), split() 메서드를 사용할 수 있다.

정규 표현식은 두 가지 방법으로 만들 수 있다.

  1. 정규 표현식 리터럴: 슬래시로 감싸서 작성
    const re1 = /ab+c/
  2. RegExp 객체 생성자 호출
    const re2 = new RegExp('ab+c')

Assertions

줄이나 단어의 시작과 끝을 나타내는 경계, 일치가 가능한 방법을 나타내는 패턴(전방탐색, 후방탐색 등)이 포함된다.

문자의미
^입력의 시작
$입력의 끝
\b단어의 경계(즉, 단어의 시작 또는 끝)
\B단어가 아닌 경계(둘 다 단어이거나 둘 다 단어가 아니어야 함)

문자 클래스

글자, 숫자처럼 다른 유형의 문자를 구분한다.

문자의미
[a-c]range 의미. 중괄호 안에 포함된 문자 중 일치하는 게 하나라도 존재
\d[0-9]와 동일
\D숫자가 아닌 아무 문자
\w[A-Za-z0-9_]와 동일
\W알파벳, 숫자, _ 가 아닌 문자
\s공백 문자
\S공백 문자가 아닌 문자
\t탭
\r캐리지 리턴(CR)
\n라인피드(LF)
\vvertical 탭

그룹과 범위

문자의미
`xy`
[xyz]문자 집합
[^xyz]부정 집합. 예시에서는 xyz를 포함하지 않는 문자를 의미

수량자

일치할 문자나 표현이 반복되어야 할 횟수를 나타낸다.

문자의미
x*앞의 문자(예시에서는 x)가 0번 이상 반복됨
x+앞의 문자(예시에서는 x)가 1번 이상 반복됨
x?앞의 문자(예시에서는 x)가 0번 또는 1번 존재함(즉, 있을 수도 없을 수도 있음)
x{n}n이 정수일 경우, 앞의 문자(예시에서는 x)가 정확히 n번 반복됨
x{n,}n이 정수일 경우, 앞의 문자(예시에서는 x)가 n번 이상 반복됨
x{n,m}n, m이 정수이고 n보다 m이 클 경우, 앞의 문자(예시에서는 x)가 최소 n번 ~ 최대 m번 반복됨

플래그

문자의미
i대소문자 구분 없이 검색
g패턴과 일치하는 모든 것을 찾음(g 플래그가 없을 경우 패턴과 일치하는 첫 번째 결과만 반환됨)
m다중 행 모드 활성화 (문자열이 다중 라인의 문자열인 경우에도 검색)
s.이 개행 문자 \n도 포함하도록 함
u유니코드 지원

사용 예시

/hello/g

  • h, e, l, l, o 중에서 하나라도 일치하는지가 아니라 hello에 매칭되는지 검색

이메일: /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)@(?:[a-z0-9](?:[a-z0-9-][a-z0-9])?.)+a-z0-9?/g

  • [a-z0-9!#$%&'*+/=?^_`{|}~-]+ : 알파벳 소문자, 숫자, 포함된 특수 문자들 중 일치하는 어느 문자가 1번 이상 반복되는지
  • (?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)* : . 문자와 매치되고, 알파벳 소문자, 숫자, 포함된 특수 문자들 중 어느 문자가 0번 이상 반복되는지. 단, 캡쳐링 그룹을 만들지 않음
  • @: @ 문자와 매치되는지
  • (?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+ : 알파벳 소문자, 숫자 중 하나라도 일치하고, (알파벳 소문자, 숫자 중 어느 문자가 0번 이상 반복되고, 알파벳 소문자, 숫자 중 하나라도 일치함)일 수도 아닐 수도 있고, . 문자와 매치되는지. 이 토큰이 1번 이상 반복되는지
  • [a-z0-9] : 알파벳 소문자, 숫자 중 어느 문자라도 매치되는지
  • (?:[a-z0-9-]*[a-z0-9])? : 알파벳 소문자, 숫자 중에 매치되는 어느 문자가 0번 이상 반복되고, 알파벳 소문자, 숫자 중에 어느 문자라도 매치되는지. 이 토큰이 있을 수도 없을 수도 있음

0개의 댓글