Regular Expression
Regular Expression, 정규표현식(이하 정규식)은 문자열을 검색/대체/추출 등 제어하는데 사용하는 언어이다.
이 문서는 JS 환경의 정규식을 기준으로 한다.
정규식의 생성 방법에는 두 가지가 있다.
생성자를 호출하여 정규식을 생성한다.
인자로 패턴 전달하며, 두번째 인자로 플래그를 전달할 수 있다.
플래그는 선택 사항이다.
const regexp1 = new RegExp("패턴");
const regexp2 = new RegExp("패턴", "플래그");
/
로 감싸서 정규식을 생성한다.
닫는 /
뒤에 플래그를 붙일 수 있다. 선택사항이다.
const regexp1 = /패턴/;
const regexp2 = /패턴/플래그;
정규식은 JS의 다양한 string 메소드와 함께 사용할 수 있다.
정규식.test(문자열)
일치하는 문자열의 유무를 boolean으로 반환한다.
문자열.match(정규식)
일치하는 문자열을 배열로 반환한다.
문자열.search(정규식)
일치하는 문자열의 index를 반환한다.
문자열.replace(정규식, 대체문자)
일치하는 문자열을 대체하여 결과를 반환한다.
원본은 수정하지 않는다.
문자열.split(정규식)
일치하는 문자열을 분할하여 배열로 반환한다.
생성자정규식.toString()
생성자 정규식을 string 리터럴로 반환한다.
플래그는 정규식을 통해 검색할 때 적용할 옵션을 지정한다.
i
Ignore case.
대소문자 구분을 하지 않는다.
g
Global.
패턴과 일치하는 모든 내용을 찾는다.
g
플래그가 없으면 일치하는 첫 번째 내용만 반환한다.
m
Multi line.
다중 행 모드를 활성화한다.
원래는 문자열에 줄바꿈이 있어도 ^
와 $
가 해당 문자열의 처음과 끝을 가리킨다.
하지만 다중 행 모드가 활성화되면 ^
와 $
가 각 줄들의 처음과 끝을 가리키게 된다..
s
.
이 개행 문자 \n
도 포함하도록 한다.
u
유니코드 전체를 지원한다.
이 플래그를 이용하여 서로게이트 쌍을 올바르게 처리할 수 있다.
y
문자 내 특정 위치에서 검색을 진행하는 'sticky' 모드를 활성화 시킨다.
탈출 문자(Escape Character)는 역슬래시 \
를 통해 의미와 기능이 변하는 문자를 말한다.
원래 아무 기능 없는 문자에 \
를 붙여 기능을 부여하기도 하고,
기능이 있는 문자에 \
를 붙여 기능 없이 문자 그 자체로만 사용한다.
정규식의 기능으로 인식되는 문자를 검색할 때 사용하게 된다.
\n
개행 문자.
\t
탭.
\b
백스페이스.
정규표현식에서 \b
는 \w
로 이루어진 문자열의 시작점 바로 앞과 끝점 바로 뒤를 말한다. 문자가 아닌 지점을 가리키는 탈출 문자이다.
\\
역슬래시.
그 외 등등
^a
문자열의 시작에 있는 a를 의미한다.
플래그 m
이 붙으면 각 줄의 시작에서 찾는다.
a$
문자열의 끝에 있는 a를 의미한다.
플래그 m
이 붙으면 각 줄의 끝에서 찾는다.
.
임의의 문자 하나를 의미한다.
a|b
a 또는 b와 일치하는 것을 의미한다.
ab?
a 또는 ab와 일치하는 것을 의미한다.
a{2}
a가 2번 연속되는 것을 의미한다.
a{2,}
a가 2번 이상 연속되는 것을 의미한다.
쉼표 앞뒤로 띄어쓰기 하지 않는다.
a{2,4}
a가 2번 이상 4번 이하로 연속되는 것을 의미한다.
쉼표 앞뒤로 띄어쓰기 하지 않는다.
[abc]
a 또는 b 또는 c를 의미한다.
[a-z]
알파벳 a~z 범위를 의미한다. (영어 소문자)
[A-Z]
알파벳 A~Z 범위를 의미한다. (영어 대문자)
[0-9]
숫자 0~9 범위를 의미한다.
숫자 범위가 아닌 문자 범위를 의미한다.
가-힣
가~힣 범위를 의미한다. (한글)
\w
word.
알파벳, 숫자, _ 총 63개 문자를 의미한다.
\b
word boundary.
\w
로 이루어진 문자열의 시작점 바로 앞과 끝점 바로 뒤를 말한다. 문자가 아닌 지점을 가리킨다.
\d
숫자(Digit)을 의미한다.
\s
공백(스페이스, 탭 등)을 의미한다.
b(?=a)
a의 앞쪽에 있는 b를 의미한다.
(?<=a)b
a의 뒤쪽에 있는 b를 의미한다.