[JavaScript] 정규 표현식

wonyu·2022년 7월 28일
0

정규 표현식이란?

문자열에서 특정 문자 조합을 찾기 위한 패턴이다.
JavaScript에서 정규 표현식은 하나의 객체로서, RegExpexec(), test() 메서드와 Stringmatch(), 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개의 댓글