자바스크립트 정규표현식

2018-03-06

1. 정규식 만들기

자바스크립트의 정규식은 RegExp 클래스이다. RegExp 생성자로도 정규식을 만들 수 있지만 간편한 리터럴 문법도 있다. 정규식 리터럴은 슬래시도 감싼 형태이다. RegExp 생성자를 써야만 할 경우가 아니면 더 간편한 리터럴 문법을 쓰는게 좋다. 하지만 정규식은 HTML처럼 매우 복잡한 것을 검색하기에는 알맞지 않다. 제대로 동작하는 것이 필요하다면 전용 파서를 찾아야 한다.

const reg1 = /going/;
const reg2 = new RegExp("going");



2. 정규식 검색

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

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


4. 입력 소비

X J A N L I O N A T U R E C O N P
  • 위의 문자열 중 LION, ION, NATURE, ECO를 찾는다면 정규식은 찾는 문자 중 X로 시작하는 단어가 없으니 X를 소비(consume)하고, L에 도착하면 L은 일치할 가능성이 있으므로 소비하지 않는다. 계속해서 I, O, N을 만나면 LION을 찾았으므로 L,I,O,N은 소비된다. 하지만 이미 N이 소비되었으므로 NATURE는 찾지 못한다.
  • 문자열 왼쪽에서 오른쪽으로 진행한다
  • 일단 소비한 글자로는 다시 돌아오지 않는다
  • 한번에 한 글자씩 움직이며 일치하는 것이 있는지 확인한다
  • 일치하는 것을 찾으면 해당하는 글자를 한꺼번에 소비한 후 다음 글자로 진행한다 (정규식에 /g 플래그를 쓸 경우 해당)

6. 정규식 문자셋

문자셋 동등한 표현 설명
\d [0-9] 숫자만
\D [^0-9] 숫자만 빼고
\s [ \t\v\n\r] 탭, 스페이스, 새로 탭, 줄바꿈 포함
\S [^ \t\v\n\r]  
\w [a-zA-Z_] ”-“이나 “.”는 포함되지 않으므로 도메인 이름이나 CSS 클래스 등은 찾을 수 없다
\W [^a-zA-Z_]  



7. 정규식 예제

8. 반복

  • 반복 메타 문자는 얼마나 많이 일치해야 하는지 지정할 때 쓴다.
  • 만약 숫자 여러 개를 찾아야 한다면?
const match = str.match(/[0-9][0-9]/); // 두 자리 숫자
const match = str.match(/[0-9]+/); // 숫자 하나 이상
문자셋 설명 예제
{n} 정확히 n개 /\d{5}/ 숫자 5자리
{n,} 최소한 n개 /\d{5,}/ 최소한 5자리 이상 숫자
{n,m} n개 이상, m개 이하 /\d{2,5}/는 2개,3개,4개,5개
? 0개 또는 1개 {0,1} /[a-z]\d?/i 글자가 있고 그 뒤에 숫자가 없거나 한 개 있는 경우
* 있거나 없어도 됨 (개수제한 없음) /[a-z]\d*/i 글자가 있고 숫자는 있거나 없어도 됨
+ 하나 이상 /[a-z]\d+/i 글자가 있고 숫자는 한 개 이상 있는 경우
. 줄바꿈을 제외한 모든 문자 /a.p/ apple일 경우 ‘app’
^ 입력값의 시작 /^This/ This로 시작하는 경우
$ 입력값의 끝 /end?/ end로 끝나는 경우



9. 마침표와 이스케이프

  • 마침표는 줄바꿈 문자를 제외한 모든 문자에 일치하는 특수 문자이다.
  • 마침표 자체가 필요할 때는 역슬래시를 붙여 이스케이프 한다.
  • 마침표 예제
  • 마침표가 줄바꿈을 제외한 모든 문자에 일치한다면, 줄바꿈 문자를 포함해서 모든 문자에 일치하는 것은? [\s\S]