정규 표현식
Post

정규 표현식

정규 표현식(정규식)은 문자열에서 특정 문자의 조합을 찾기 위한 패턴이다.

javascript에서 정규표현식은 객체로 RegExp의 exec(),test()메서드를 사용할 수 있다.
또한 String의 match(),matchAll(),replace(),replaceAll(),search(),split()메서드와도 함께 사용할 수 있다.

정규표현식 만들기

정규표현식 리터럴

정규표현식 리터럴 방식은 슬래시(/)로 패턴을 감싸서 작성하면된다.

1
    const ex = /ab+c/

이 방식은 스크립트를 불러올 때 컴파일되므로 바뀌지 않는 패턴의 경우 사용하면 성능이 향상될 수 있다.

RegExp 객체 생성자 호출

1
    const ex = new RegExp('ab+c')

생성자 함수를 사용하면 런타임에 컴파일이 되므로, 바뀔 수 있는 패턴이나 외부 출처, 사용자 입력 가능성이 있는 패턴의 경우에 이방법을 추천한다.

Flag

정규표현식 끝에 flag를 붙이지 않으면 문자열에 대해 검색을 한번만 처리하고 종료하게 된다.

/ab+c/i여기서 마지막에 붙은 i값이 flag이다.
flag 옵션은 다음과 같다.

  • g : Global을 표현하고 대상 문자열내의 모든 패턴들을 검색한다.
  • i : Ignore case를 표현하고 대상 문자열에 대/소문자를 식별하지 않는다.
  • m : Multi line을 표현하고 대상 문자열이 다중 라인의 문자열이라도 검색한다.

정규 표현식 패턴작성

단순패턴

단순패턴은 문자열을 있는 그대로 탐색할 때 사용한다. /abc/라는 패턴을 사용시 문자열에 abc가 그대로 들어있어야 일치하게 된다.

특수문자 사용

하나이상의 문자를 찾거나 공백문자를 찾는 등의 직접적인 일치 이상의 탐색이 필요할 경우 특수문자를 사용한다.

  • Assertions : 줄이나 단어의 시작과 끝을 나타내거나 일치가 가능한 방법을 나태는 방법이 포함된다.
    • ^ : 입력의 첫글자와 일치하여야 함. /^A의 경우 A로 시작하는 글자를 찾음.
    • $ : 입력의 마지막글자와 일치하여야 함.
    • \b : 단어의 경계를 나타냄. 단어의 첫글자 또는 마지막글자를 일치시킴.
  • 문자 클래스 : 문자 종류를 구분한다.
    • [xyz], [a-c] : 포함된 문자 중 하나와 일치함.
    • [^xyz],[^a-c] : ^하이픈을 사용하면 같이 대괄호에 묶이지 않은 다른 모든글자와 일치함.
    • . : ,를 제외한 모든단일 문자와 일치함.
    • \d : 모든 숫자와 일치함.
    • \D : 숫자가 아닌 모든 문자와 일치함.
    • \w : 모든 영숫자 문자와 일치함.
    • \W : 기본 영숫자 문자를 제외한 문자와 일치함.
    • \s : 공백, 탭, 줄바꿈 및 기타 유니코드 공백을 포함한 공백문자와 일치함.
    • \S : 공백이외의 단일문자와 일치함..
    • \t : 가로탭과 일치함.
    • \0 : null문자와 일치함.
  • Quantifiers : 일치시킬 문자 또는 표현식의 수를 나타낸다.
    • x* : 선택항목”x”를 0회 이상 일치시킴.
    • x+ : 선택항목”x”를 1회 이상 일치시킴.
    • x? : 선택항목”x”를 0회 또는 1회 일치시킴.
    • x{n} : 선택항목”x”가 n(양의정수값)개 항목과 정확히 일치함.
    • x{n,} : 선택항목”x”가 n개 이상 일치함.
    • x{n,m} : 선택항목”x”가 최소 n개이상이고, 최대m개 이하일때 일치함.

이스케이핑

특수문자를 있는 그대로 탐색할 경우(*사용)에는 특수문자 앞에 역슬래시()를 사용해야한다.

역슬래시가 특수문자를 ‘escape’해서 특수문자가 아닌 문자 리터럴로 취급한다.

정규표현식 사이트

정규 표현식을 잘 작성했는지 테스트하기 좋은 사이트들이 있다.

참고