정규표현식
정규표현식에 대한 자료가 상당한 관계로 사용해보면서 알게된 문법들을 하나씩 정리하기 위한 글입니다.
정규표현식 사용 방법
- /정규표현식/.메서드(str);
/ab+c/.test(123);
/ab+c/.test(abcd);
- RegExp(정규표현식).메서드(str);
const regExp = new RegExp('ab+c');
regExp.test(123);
regExp.test('abcd');
두 방법의 차이는 정규표현식을 변수화하여 사용할 수 있는가라고 생각한다.
정규표현식을 변수화해야하는 경우가 언제 있을지 모르겠으나, 그 때는 regExp 생성자함수를 사용하면 된다.
메서드
메서드마다 string이 호출자인지, regExp이 호출자인지 달라진다. 왜 이렇게 만들었는지는 모르겠으나, 당황말고 주의해서 사용하자.
- regExp.test(str): str이 정규표현식에 부합하는지 검증후 boolean 형태로 값을 반환한다.
- str.match(regExp): str이 정규표현식에 부합하는지 검증후 부합되는 string만 Array 형태로 반환한다.
- 전역 플래스(g) 사용시: 부합하는 모든 string을 Array의 값으로 반환 하지만, 캡처링 그룹은 반환하지 않는다.
- 전역 플래스(ㅎ) 미 사용시: 첫번째로 부합하는 값과 캡쳐 그룹을 같이 Array형으로 반환.
- str.matchAll(regExp): 정규표현식에 부합하는지 검증후 부합되는 모든 값과 캡쳐 그룹을 같이 Array형으로 반환한다. 단, matchAll은 반드시 전역 플래그와 함께 사용해야 한다.
캡쳐링그룹?
소괄호'()'를 둘러싼 영역이 캡쳐 그룹이다.
const str = '12341234';
str.match(/123(4)/);
str.match(/123(4)/g);
다름이 보이는가 전역 플래그 사용시 캡쳐링 그룹을 제외하고 순수하게 부합되는 결과만 Array 형태로 반환한다.
반면, 전역 플래그 미사용시 첫번째로 부합되는 결과와 그 결과 내의 캡쳐링 그룹을 결과로 반환한다.
Character classes
자주사용되는 문자를 분류한 정규표현식의 문법이다.
- \는 \d 처럼 특수한 Character class로 매칭시키기 위해 사용된다. 혹은 .의 경우 Character class로 사용하지 않고, 문자 그대로의 .과 매칭해야되는 경우 사용할 수 있다.
- . 은 개행문자(\n, \r, \u2028)를 제외한 단일 문자와 매칭된다.
- \d는 0부터 9까지의 숫자와 매칭된다.
Assertions
- ^는 문자의 시작과 매칭되는지 확인하기 위해 사용한다.
- $는 문자의 끝과 매칭되는지 확인하기 위해 사용한다.
Groups
- x|y 는 x 또는 y와 매칭된다.
- [xyz] 하나의 문자가 xyz라는 범위에 포함되는지를 확인한다.
- [^xyz] 하나의 문자가 xyz를 제외한 문자에 매칭되는지를 확인한다.
Quantifiers(정량자)
문자의 수와 관련된 기능을 제공한다.
- x*: x가 0개 이상인 경우 매칭된다.
- x+: x가 1개 이상인 경우 매칭된다.
- x{n,} x가 최소 n개 이상인 경우 매칭된다.