모던 자바스크립트 Deep Dive - 31. RegExp

둡둡·2024년 2월 19일

Modern Javascript Deep Dive

목록 보기
32/49

31.1. 정규 표현식이란?

  • 정규 표현식은 일정한 패턴을 가진 문자열의 집합을 표현하는 형식 언어
  • 문자열 대상으로 패턴 매칭 기능 제공
    • 특정 패턴과 일치하는 문자열 검색 또는 추출하는 기능
    • 유효성 검사
  • 반복문과 조건문 없이 패턴 정의하여 테스트 가능

31.2. 정규 표현식의 생성

  • / : 시작 및 종료 기호
  • regexp : 패턴(pattern)
  • i : 플래그(flag)
  • RegExp 생성자 함수: new RegExp(pattern[, flags])
    • 동적으로 RegExp 객체 생성 가능

31.3. RegExp 메서드

31.3.1. RegExp.prototype.exec

  • 인수로 전달받은 문자열을 정규 표현식의 패턴으로 검사하여 결과를 배열로 반환
  • ex. regExp.exec(target)

31.3.2. RegExp.prototype.test

  • 인수로 전달받은 문자열을 정규 표현식의 패턴으로 검사하여 결과를 불리언으로 반환
  • ex. regExp.test(target)

31.3.3. String.prototype.match

  • String 표준 빌트인 객체 제공
  • 대상 문자열과 전달받은 정규 표현식의 매칭 결과를 배열로 반환
  • ex. string.match(regExp)
  • g 플래그 지정시 모든 매칭 결과를 배열로 반환

31.4. 플래그

  • i (ignore case) : 대소문자 구별하지 않고 패턴 검색
  • g (global) : 대상 문자열 내에서 패턴과 일치하는 모든 문자열 전역 검색
  • m (multi line) : 문자열의 행이 바뀌더라도 계속 검색
  • 선택적 옵션, 순서 상관 없이 여러 개의 플래그 설정 가능

31.5. 패턴

  • 일정한 규칙(패턴)을 가진 문자열의 집합을 표현하기 위한 형식 언어
  • 패턴은 /로 열고 닫음
  • 따옴표 생략

31.5.1. 문자열 검색

  • 정규 표현식의 패턴에 문자 또는 문자열을 지정하여, RegExp 메서드 사용하여 검색 수행
  • 플래그를 생략하는 경우 첫 번째 결과만 반환

31.5.2. 임의의 문자열 검색

  • . : 임의의 문자 한 개를 의미함
const string = 'Hello world';
const regExp = /.../g;
string.match(regExp); // ["Hel", "lo ", "wor", "ld "]

31.5.3. 반복 검색

  • {m,n} : 최소 m번, 최대 n번 반복되는 문자열 의미
    • 콤마 뒤에 공백 있으면 정상 동작하지 않음
    • ex. /A{1,2}/g -> A가 최소 1번, 최대 2번 반복
    • : 앞의 패턴이 최소 한 번 이상 반복되는 문자열 = {1,}
  • ? : 앞의 패턴이 최대 한 번 이상 반복되는 문자열 = {0,1}

31.5.4. OR 검색

  • | = or
    • 와 함께 사용하여 분해되지 않는 문자열 검색
    • ex. /A+|B+/g
  • [] 내 문자로 범위 지정 가능
    • /A+|B+/g = /[AB]+/g
    • /[A-Z]+/g = A~Z가 한 번 이상 반복되는 문자열 전역 검색
    • /[A-Za-z]+/g = 대소문자 구별하지 않음
    • /[0-9]+/g = /[\d,]+/g = 숫자 검색
      • \D는 숫자가 아닌 문자 검색
  • \w = [A-Za-z0-9_] = 알파벳, 숫자, 언더스코어
    • \W는 반대로 동작

31.5.5. NOT 검색

  • [^...] = not 의미, 제외한 문자 ㄱ머색

31.5.6. 시작 위치로 검색

  • [] 내부에 위치하지 않은 ^ : 문자열의 시작 의미

31.5.7. 마지막 위치로 검색

  • $ : 문자열의 마지막 의미

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

31.6.1. 특정 단어로 시작 검사

  • ^ 맨 앞에 위치
  • /^https?:/

31.6.2. 특정 단어로 종료 검사

  • $ 문자열 마지막 위치
  • /html$/

31.6.3. 숫자로만 이루어진 문자열 검사

  • ^\d+$/ : 숫자로 시작하며, 앞선 패턴이 반복됨

31.6.4. 공백으로 시작하는지 검사

  • \s : 여러 가지 공백 문자(스페이스, 탭 등) 의미
  • /^[\s]+/

31.6.5. 아이디 사용 가능 검사

  • 알파벳 대소문자 또는 숫자로 시작하고 끝나며, 4~10자리인지 검사
  • /^[A-Za-z0-9]{4,10}$/

31.6.6. 메일 주소 형식 검사

31.6.7. 핸드폰 번호 형식 검사

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

31.6.8. 특수문자 포함 여부 검사

  • /[^A-Za-z0-9]/gi
  • 문자 및 숫자가 아닌 문자 검사
  • 특수문자 제거: string.replace(/[^A-Za-z0-9]/gi, '')

[출처] 모던 자바스크립트, Deep Dive

profile
괴발개발라이프

0개의 댓글