자바스크립트/정규표현식

정규표현식 (Regular Expression) 이란?

Jake Seo 2023. 4. 3. 01:01

정규표현식이란?

  • 패턴을 통해 원하는 텍스트를 매칭시키는 도구이다.
  • 특정 문자열이 있는지 검사하거나 특정 문자열만 변경하거나 하는 등의 기능에 사용된다.

정규표현식 엔진이 동작하는 방식

  • 보통 정규표현식의 검색 방식을 '값을 소비한다' 고 표현한다.
  • 일단 패턴에 매칭되는 문자를 찾으면 매칭된 문자열을 소비하기 때문이다.
  • 소비한다는 것은 엔진이 매칭된 문자의 위치를 전진시킨다는 것이다.
  • 그래서 소비 이후에는 더이상 이전의 문자가 매칭되지 않는다.
  • 단, 소비되었다고 해서 문자가 지워지거나 변경된 것은 아님을 아는 것이 중요하다.
  • Lookaround 의 경우에는 값을 소비하지 않는다.

정규표현식의 구성 요소

  • 메타 문자열(Metacharacters): 정규표현식에서 특수한 의미를 갖는 문자들을 말한다.
    • ^, $, ., *, +, ?, {}, [], (), |, \
    • 메타문자열은 반복, 대체, 그룹화와 같은 더 복잡한 패턴을 만드는 것을 도와준다.
  • 리터럴(Literal): 메타 문자열을 제외한 일반 문자를 말한다.

아래는 메타 문자열 표이다.

picture 1

출처: kb 4D Knowledge Base

정규표현식 그룹 (Group)

  • () 기호를 통한 서브 패턴에 의해 매칭된 문자열을 그룹이라고 한다.

그룹의 형태

  • 캡쳐링 그룹 (Capturing groups): (\d{4})-(\d{2})-(\d{2}) 은 연월일을 캡쳐할 수 있다.
    • 캡쳐링 그룹을 통해 연, 월, 일 데이터를 쉽게 분리하여 사용할 수 있다.
  • 대체 그룹 (Alter group): (apple|banana|tomato) 를 이용하면, 셋중 하나가 있다면 일치한다.
    • 이는 하나의 캡쳐링 그룹으로 취급된다.
    • 여러 개의 캡쳐링 그룹으로 나누고 싶다면 (apple)|(banana)|(tomato) 를 사용하면 된다.
  • 논 캡쳐링 그룹 (Non-capturing groups): (?:ab) 캡쳐링이 되는 것을 원하지 않는다면, ?: 기호를 통해 논캡쳐링 그룹을 만들 수 있다.

문자 클래스 (Character classes)

  • 매칭시킬 문자를 정의하기 위한 방법 중 하나이다.

사용자 정의 문자 클래스 (Custom character classes)

  • 사용자 정의 문자 클래스는 [] (sqaure brackets) 내부에 원하는 문자를 넣어 만들 수 있다.
    • [aeiou] 는 소문자 모음을 매칭시킬 수 있다.
    • [13579] 는 홀수 숫자를 매칭시킬 수 있다.

범위 문자 클래스 (Range character classes)

  • 범위 문자 클래스는 문자와 문자 사이 하이픈(-) 을 이용해 원하는 문자 범위를 매칭시킬 수 있다.
    • [a-z]: 영어 소문자 알파벳을 매칭한다.
    • [a-zA-Z]: 모든 영어 알파벳을 매칭한다.

부정 문자 클래스 (Negative character classes)

  • 몇가지를 제외한 나머지를 모두 매칭시키고 싶을 때 사용한다.
    • [^a]: a를 제외한 모든 것을 매칭시킨다.

미리 정의된 문자 클래스 (Predefined character classes)

  • \ 가 앞에 붙는 특수한 정규표현식 문자이다.
  • 미리 정의된 문자 클래스는 [] 내부가 아니어도 잘 동작한다.

종류

  • \d: 숫자를 매칭시킨다.
  • \D: 숫자를 제외한 것을 매칭시킨다.
  • \w: 알파벳, 숫자, 언더바까지 매칭시킨다.
  • \W: 알파벳, 숫자, 언더바를 제외하고 매칭시킨다.
  • \s: 공백 문자열을 매칭시킨다.
  • \S: 공백 문자열을 제외하고 매칭시킨다.

정규표현식의 용도

  • 문자 검색
  • 문자 변경 혹은 대체
  • 문자 쪼개기
  • 문자 검증하기 (이메일, 아이디 글자수 등)
반응형