정규 표현식(Regular expressions)
문자열에서 특정 문자의 조합을 찾는데 이용되는 패턴
RegExp
메서드의 exec()
와 test()
에 사용된다.
String
메서드의 match()
, matchAll
, replace()
, replaceAll()
, search()
, split()
에 사용된다.
정규 표현식 만들기
방법 1. 정규 표현식 리터럴
const re = /ab+c/;
- 슬래시로 패턴을 감싸서 작성한다.
- 정규 표현식 리터럴은 스크립트를 불러올 때 컴파일되므로, 변경될 일이 없는 패턴은 리터럴을 사용하면 성능이 향상될 수 있다.
방법 2. RegExp 객체의 생성자 호출
const re = new RegExp('ab+c');
- 생성자 함수를 사용하면 정규 표현식이 런타임에 컴파일되므로, 변경될 수 있는 패턴이나 사용자 입력 등 외부 출처에서 가져오는 패턴에서 사용한다.
정규 표현식 패턴 작성하기
- 정규 표현식 패턴은 슬래시로 감싸서 작성한다.
단순 패턴 사용하기
- 직접적인 일치 탐색이 필요할 때 사용한다.
/abc/
는 문자열에서 정확한 순서로 'abc'
라는 문자의 조합을 탐색할 때 사용한다.
특수 문자 사용하기
- 직접적인 일치 이상의 탐색이 필요할 때 특수 문자를 사용한다.
예를 들어, 하나의 'a'
이후에 0개 이상의 'b'
, 그 뒤의 'c'
와 일치해야 하면 /ab*c/
패턴을 사용할 수 있다. 'b'
뒤의 *
은 이전 항목의 0번 이상 반복을 의미한다.
- 특수 문자의 의미와 사용 방법은 드림코딩 엘리 님의 정규 표현식 정리에서 확인할 수 있다.
이스케이핑
- 특수 문자를 있는 그대로 탐색해야 하는 경우, 특수 문자 앞에 역슬래시()를 배치해서 이스케이프 해야 한다.
예를 들어, "a" 뒤의 별표("*") 뒤의 "b"와 일치해야 하면 /a*b/를 사용하면 된다. 역슬래시가 "*"를 "이스케이프"해서, 특수 문자가 아닌 문자 리터럴로 취급합니다.
괄호
- 정규 표현식의 아무 부분을 괄호로 감싸게 되면, 그 부분과ㅏ 일치하는 부분 문자열을 기억하게 된다.
플래그
- 정규 표현식 패턴 뒤에 플래그를 사용하여 전역 탐색이나 대소문자 무시와 같은 특성을 지정할 수 있다.
- 플래그는 단독으로 사용할 수 있고, 순서에 상관 없이 한꺼번에 여럿을 지정할 수 있다.
플래그 | 설명 |
---|
d | 부분 문자열 일치에 대해 인덱스 생성 |
g | 전역 탐색 |
i | 대소문자를 구분하지 않음 |
m | 여러 줄에 걸쳐 탐색 |
s | 개행 문자가 .과 일치함 |
u | "unicode", 패턴을 유니코드 코드 포인트의 시퀀스로 간주함 |
y | "접착" 탐색, 대상 문자열의 현재 위치에서 탐색을 시작함 |
const re = /pattern/flags;
const re = new RegExp('pattern', 'flags');
정규 표현식 테스트할 수 있는 사이트
참고문헌