정규표현식 정리하기

Yeongjong Kim·2021년 12월 22일
0

정규표현식

정규표현식에 대한 자료가 상당한 관계로 사용해보면서 알게된 문법들을 하나씩 정리하기 위한 글입니다.

정규표현식 사용 방법

  1. /정규표현식/.메서드(str);
/ab+c/.test(123); // false;
/ab+c/.test(abcd); // true;
  1. RegExp(정규표현식).메서드(str);
const regExp = new RegExp('ab+c');
regExp.test(123); //false
regExp.test('abcd'); //true

두 방법의 차이는 정규표현식을 변수화하여 사용할 수 있는가라고 생각한다.
정규표현식을 변수화해야하는 경우가 언제 있을지 모르겠으나, 그 때는 regExp 생성자함수를 사용하면 된다.

메서드

메서드마다 string이 호출자인지, regExp이 호출자인지 달라진다. 왜 이렇게 만들었는지는 모르겠으나, 당황말고 주의해서 사용하자.

  1. regExp.test(str): str이 정규표현식에 부합하는지 검증후 boolean 형태로 값을 반환한다.
  2. str.match(regExp): str이 정규표현식에 부합하는지 검증후 부합되는 string만 Array 형태로 반환한다.
    • 전역 플래스(g) 사용시: 부합하는 모든 string을 Array의 값으로 반환 하지만, 캡처링 그룹은 반환하지 않는다.
    • 전역 플래스(ㅎ) 미 사용시: 첫번째로 부합하는 값과 캡쳐 그룹을 같이 Array형으로 반환.
  3. str.matchAll(regExp): 정규표현식에 부합하는지 검증후 부합되는 모든 값과 캡쳐 그룹을 같이 Array형으로 반환한다. 단, matchAll은 반드시 전역 플래그와 함께 사용해야 한다.

캡쳐링그룹?

소괄호'()'를 둘러싼 영역이 캡쳐 그룹이다.

const str = '12341234';
str.match(/123(4)/); // [ '1234', '4', index: 0, input: '12341234', groups: undefined ]

str.match(/123(4)/g); // [ '1234', '1234' ]

다름이 보이는가 전역 플래그 사용시 캡쳐링 그룹을 제외하고 순수하게 부합되는 결과만 Array 형태로 반환한다.
반면, 전역 플래그 미사용시 첫번째로 부합되는 결과와 그 결과 내의 캡쳐링 그룹을 결과로 반환한다.

Character classes

자주사용되는 문자를 분류한 정규표현식의 문법이다.

  1. \는 \d 처럼 특수한 Character class로 매칭시키기 위해 사용된다. 혹은 .의 경우 Character class로 사용하지 않고, 문자 그대로의 .과 매칭해야되는 경우 사용할 수 있다.
  2. . 은 개행문자(\n, \r, \u2028)를 제외한 단일 문자와 매칭된다.
  3. \d는 0부터 9까지의 숫자와 매칭된다.

Assertions

  1. ^는 문자의 시작과 매칭되는지 확인하기 위해 사용한다.
  2. $는 문자의 끝과 매칭되는지 확인하기 위해 사용한다.

Groups

  1. x|y 는 x 또는 y와 매칭된다.
  2. [xyz] 하나의 문자가 xyz라는 범위에 포함되는지를 확인한다.
  3. [^xyz] 하나의 문자가 xyz를 제외한 문자에 매칭되는지를 확인한다.

Quantifiers(정량자)

문자의 수와 관련된 기능을 제공한다.

  1. x*: x가 0개 이상인 경우 매칭된다.
  2. x+: x가 1개 이상인 경우 매칭된다.
  3. x{n,} x가 최소 n개 이상인 경우 매칭된다.
profile
Front 💔 End

0개의 댓글