Vana Blog

(ES6)learning javascript - 정규표현식

February 22, 2019

정규 표현식

문자열 매칭 기능 제공.

정규식 만들기

리터럴 문법 또는 RegExp 생성자 사용.
동적으로 정규식을 만들 때 RegExp 생성자를 사용한다.

const re1 = /going/;
const re2 = new RegExp('going');

정규식 검색

문자열에 search, match 메소드 사용
정규식에 exec, test 메소드 사용
정규식 리터럴을 그대로 사용해도 가능하다.
String.prototype.match or RegExp.prototype.test

정규식을 사용한 문자열 교체

replace과 함께 사용 가능.

/area|a|link|script|source/ig

| : 대체
ig : 대소문자 가리지 않음
g : 전체, 없으면 일치하는 첫 번째만 반환
^ : 앞에 ^ 붙으면 문자셋 제외

자주쓰는 문자셋

\d : [0-9]
\D : [^0-9]
\s : [ \t\v\n\r] // 탭, 스페이스, 세로 탭, 줄바꿈
\S : [^ \t\v\n\r]
\w : [a-zA-Z_]  
\W : [^a-zA-Z_]  

반복

문자셋의 다음 + 는 그 앞에 있는 요소가 하나 이상 있어야 한다는 뜻. 반복 메타 문자

 {n} : 정확히 n 개 | /d{5}/
 {n,} : 최소한 n 개 | /\d{5,}/ // 5자리 이상
 {n, m} : n개 이상 m개 이하 | /\d{2,5}/ // 2~5개
 ? : 0개 또는 1개 {0,1} | /[a-z]\d?/// 글자가 있고 그다음에 숫자가 없거나 한개 있는 경우
 * : 숫자는 상관 없다. 없어도 된다. | /[a-z]\d*/// 글자가 있고 그다음에 숫자가 없거나 있는 경우
 + : 하나 이상 | /[a-z]\d+/// 글자가 있고 그다음에 숫자가 1개 이상

마침표와 이스케이프

정규식에서 마침표는 줄바꿈 문자를 제외한 모든 문자에 일치하는 특수 문자이다.
정규식 특수 문자를 이스케이프해서 일반 문자로 사용하려면 그 앞에 \ 를 붙이면 된다.

와일드 카드

  [\s\S]

그룹

그룹은 괄호로 만든다.

(?:[subexpression]) // subexpression 패턴 제외
(?:https?)? // s? : s는 옵션.  

위치 지정

^는 문자열의 맨 처음, $는 문자열의 마지막

const input = "One line\nTwo lines\nTree lines\nFour";
const beginnings = input.match(/^\w+/mg);
const endings = input.match(/\w+$/mg);

룩어헤드

입력을 소비하지 않는 독립적 정규식

function validPassword(p) {
  return /(?=.*[A-Z])(?=.*[0-9])(=.*[a-z])(?!.*[^a-zA-Z0-9])/.test(p);
}

동적으로 정규식 만들기

const userRegex = new RegExp(`@(?:${users.join('|')})\\b', 'g');

Vana Yun

Written by Vana Yun