[Deep Dive] 31장 - RegExp
1. 정규 표현식이란?
일정한 패턴을 가진 문자열의 집합을 표현하기 위해 사용하는 형식 언어(formal language)다.
문자열을 대상으로 패턴 매칭 기능을 제공한다.
패턴 매칭 기능이란 특정 패턴과 일치하는 문자열을 검색하거나 추출 또는 치환할 수 있는 기능을 말한다.
2. 정규 표현식의 생성
정규 표현식 리터럴과
RegExp 생성자 함수를 사용할 수 있다.
일반적인 방법은 정규 표현식 리터럴 사용
정규 표현식 리터럴은 패턴과 플래그로 구성된다.
const target = 'Is this all there is?';
// 패턴: is
// 플래그: i => 대소문자를 구별하지 않고 검색한다.
const regexp = /is/i;
// test 메서드는 target 문자열에 대해 정규 표현식 regexp의 패턴을 검색하여 매칭 결과를
// 불리언 값으로 반환한다.
regexp.test(target); // true
RegExp 생성자 함수 사용
/**
* pattern: 정규 표현식의 패턴
* flags: 정규 표현식의 플래그(g, i, m, u, y)
*/
new RegExp(pattern[, flags]);
const target = 'IS this all there is';
const regexp = new RegExp(/is/i);
regex.test(target); // true;
3. RegExp 메서드
3-1. RegExp.prototype.exec
정규 표현식의 패턴을 검색해 매칭 결과를 배열로 반환
결과가 없는 경우 null 반환
모든 패턴을 검색하는 g 플래그를 지정해도 첫 번째 매칭결과만 반환
3-2. RegExp.prototype.test
test 메서드는 인수로 전달받은 문자열에 대해 정규 표현식의 패턴을 검색하여 매칭 결과를 불리언 값으로 반환
3-3. String.prototype.match
String 표준 빌트인 객체가 제공하는 match 메서드는 대상 문자열과
인수로 전달받은 정규 표현식과의 매칭 결과를 배열로 반환
String.prototype.match 메서드는 g 플래그가 지정되면 모든 매칭 결과를 배열로 반환한다.
const target = 'Is this all there is?';
const regExp = /is/;
target.match(regExp);
// ["is", index: 5, input: "Is this all there is?", groups: undefined]
const target2 = 'Is this all there is?';
const regExp2 = /is/;
target2.match(regExp2);
// ["is", "is"]
4. 플래그
패턴과 함께 정규 표현식을 구성하는 플래그는
정규 표현식의 검색 방식을 설정하기 위해 사용한다.
플래그는 총 6개 있다.
그 중 중요한 3개의 플래그는
플래그 | 의미 | 설명 |
i | Ignore case | 대소문자를 구별하지 않고 패턴을 검색한다. |
g | Global | 대상 문자열 내에서 패턴과 일치하는 모든 문자열을 전역 검색한다. |
m | Multi line | 문자열의 행이 바뀌더라도 패턴 검색을 계속한다. |
순서와 상관없이 하나 이상의 플래그를 동시에 설정 O
플래그 X => 대소문자를 구별해 패턴 검색
=> 1개 이상 존재해도 첫 번째 매칭한 대상만 검색하고 종료
5. 패턴
패턴을 표현하는 몇 가지 방법
5-1. 문자열 검색
5-2. 임의의 문자열 검색
5-3. 반복 검색
5-4.OR 검색