본문 바로가기
Books/모던 JS Deep Dive ✔️

[모던 JS Deep Dive] 31장 - RegExp

by Aaron-Kim 2022. 1. 19.

31.1 정규 표현식이란?

  - 정규 표현식: 일정한 패턴을 가진 문자열의 집합을 표현하기 위해 사용하는 formal language

    - 문자열을 대상으로 패턴 매칭 기능 제공 (특정 패턴과 일치하는지 문자열 검색/추출/치환하는 기능)

      - ex. 휴대폰 전화번호 패턴 매칭 (숫자 3개 - 숫자 4개 - 숫자 4개)

      - /^\d{3}-\d{4}-\d{4}$/

    - 반복문과 조건문 없이 패턴 정의하고 테스트해서 간단히 체크 가능

    - 주석, 공백 허용하지 않고 여러 기호를 사용해서 가독성이 좋지 않은 단점

  - JS는 ES3부터 Perl의 정규 표현식 문법 도입

31.2 정규 표현식의 생성

  - 정규 표현식 객체 생성 방법

    - 정규 표현식 리터럴

      - /regexp/i

        - 앞 / 는 시작 기호

        - 뒤 / 는 종료 기호

        - regexp는 패턴

        - i는 플래그 (i 플래그: 대소문자 구별하지 않고 검색)

    - RegExp 생성자 함수

      - new RegExp(패턴, 플래그)

31.3 RegExp 메서드

  - RegExp.prototype.exec

    - 인수로 전달받은 문자열에 대해 정규 표현식의 패턴을 검색하여 매칭 결과를 배열로 반환

    - 매칭 결과 없으면 null 반환

    - 문자열 내의 모든 패턴 검색하는 g 플래그 지정해도 첫 번째 매칭 결과만 반환함

  - RegExp.prototype.test

    - 인수로 전달받은 문자열에 대해 정규 표현식의 패턴을 검색하여 매칭 결과를 불리언 값으로 반환

  - String.prototype.match

    - 대상 문자열과 인수로 전달받은 정규 표현식과의 매칭 결과를 배열로 반환

    - g 플래그 지정되면 모든 매칭 결과를 배열로 반환

31.4 플래그

  - 플래그정규 표현식의 검색 방식을 설정하기 위해 사용 (총 6개 있음)

    - i 플래그

      - Ignore case

      - 대소문자 구별하지 않고 패턴 검색

    - g 플래그

      - Global

      - 대상 문자열 내에서 패턴과 일치하는 모든 문자열을 전역 검색

    - m 플래그

      - Multi line

      - 문자열의 행이 바뀌더라도 패턴 검색 계속 진행

31.5 패턴

  - 문자열 검색

    - 패턴에 문자/문자열 지정하면 검색 대상 문자열에서 패턴으로 지정한 문자/문자열 검색

    - 플래그 생략되면 대소문자 구별해서 매치한 첫 번째 결과만 반환

    - 대소문자 구별하기 위해서는 i 플래그 사용

    - 검색 대상 문자열 내에서 패턴과 매치하는 모든 문자열 전역 검색 위해 플래그 g 사용

  - 임의의 문자열 검색

    - . 은 임의의 문자 1개를 의미함

  - 반복 검색

    - {m,n}은 앞선 패턴이 최소 m번, 최대 n번 반복되는 문자열 의미 (콤마 뒤에 공백이 있으면 안됨)

    - {n}은 앞선 패턴이 n번 반복되는 문자열

      - {n}은 {n,n}과 같음

    - {n,}은 앞선 패턴이 최소 n번 이상 반복되는 문자열

    - +는 앞선 패턴이 최소 한번 이상 반복되는 문자열

      - +는 {1,}과 같음

    - ?는 앞선 패턴이 최대 한번 이상 반복되는 문자열

      - ?은 {0,1}과 같음

  - OR 검색

    - | 은 or의 의미 가짐

    - 분해되지 않은 단어 레벨로 검색하기 위해 + 함께 사용

    - [ ] 내의 문자는 or로 동작 (그 뒤에 + 사용하면 앞선 패턴 한번 이상 반복)

    - 범위 지정하고 싶으면 [ ] 내에 - 사용

    - 대소문자 구별하지 않고 알파벳 검색 => /[A-Za-z]+/g

    - 숫자 검색 => /[0-9]+/g

    - \d는 [0-9]와 같음

    - \D는 \d와 반대로 동작 (숫자가 아닌 문자 의미)

    - \w는 알파벳, 숫자, 언더스코어 의미

      - [A-Za-z0-9_]와 같음

    - \W는 \w와 반대로 동작 (알파벳, 숫자, 언더스코어 아닌 문자 의미)

  - NOT 검색

    - [ ] 내의 ^은 not을 의미

    - ex. [^0-9] => 숫자 제외한 문자

      - \D 와 같음

  - 시작 위치로 검색

    - [ ] 밖의 ^은 문자열의 시작 의미

    - [ ] 내의 ^은 not의 의미

  - 마지막 위치로 검색

    - $는 문자열의 마지막 의미

31.6 자주 사용하는 정규표현식

  - 특정 단어로 시작하는지 검사

    - [ ] 밖의 ^ 시작 패턴 사용하고, ? 나 | 함께 이용

  - 특정 단어로 끝나는지 검사

    - $ 문자열 마지막 패턴 이용

  - 숫자로만 이루어진 문자열인지 검사

    - /^\d+$/

  - 하나 이상의 공백으로 시작하는지 검사

    - \s는 여러 가지 공백 문자(스페이스, 탭 등) 의미

    - \s 는 [\t\r\n\v\f]와 같음

    - /^[\s]+/

  - 아이디로 사용 가능한지 검사

    - /^[A-Za-z0-9]{4,10}$/

  - 메일 주소 형식에 맞는지 검사

  - 핸드폰 번호 형식에 맞는지 검사

    - /^\d{3}-\d{3,4}-\d{4}$/

  - 특수 문자 포함 여부 검사

    - /[^A-Za-z0-9]/gi

    - 특수 문자 제거시에는 replace 메서드 이용

반응형

댓글