JS & TS/JavaScript

[JavaScript] 정규 표현식

Bay Im 2025. 3. 22. 16:50

정규 표현식

  • 정규 표현식(regular expression)
    • 문자열에서 특정한 규칙을 가지는 문자열의 집합을 찾아내기 위한 검색 패턴
    • 모든 종류의 문자열 검색이나 교체 등의 작업에서 사용
  • 정규 표현식의 생성
    • 정규 표현식 리터럴을 이용한 생성
      • /검색패턴/플래그
    • RegExp 객체를 이용한 생성
      • new RegExp(”검색패턴”)
    • 예시
      • var regStr = /a+bc/; // 정규 표현식 리터럴을 이용한 생성
        var regObj = new RegExp("a+bc"); // RegExp 객체를 이용한 생성
        
        regStr; // /a+bc/
        regObj; // /a+bc/
    • 단순한 패턴 검색은 문자열 직접 나열
      • var strReg1 = /abc/;
      • targetStr.search(strReg1); ⇒ 해당 위치의 첫번째 인덱스 반환, 목찾으면 -1 반환
  • 플래그 flags
    • 정규 표현식 생성할 때 플래그를 사용하여 기본 검색 설정을 변경할 수 있다
    • 설정된 플래그는 나중에 추가되거나 삭제될 수 없다.
    • 플래그 종류
      • i
        • 대소문자 구분하지 않도록 설정
      • g
        • 일치하는 모든 부분 선택
      • m
        • 여러 줄의 입력 문자열을 그상태 그대로 여러 줄로 비교하도록 설정
      • y
        • 대상 문자열의 현재 위치부터 비교를 시작하도록 설정
    • 예시
      • var targetStr = "bcabcAB";
        var strReg = /AB/; // 검색 패턴 비교 시 기본 설정으로 대소문자를 구분함.
        var strUsingFlag = /AB/i; // new RegExp("AB", "i")와 동일
        
        targetStr.search(strReg); // 5
        targetStr.search(strUsingFlag); // 2 -> 대소문자를 구분하지 않고 검색
  • 특수 문자
    • 더 복잡한 조건을 사용할 때 특수문자 사용
    • 특수 문자 종류
      • \
        • \ 다음에 일반문자가 나오면 이스케이프 문자로 해석하고, 특수문자가 나오면 일반문자로 해석
      • \d
        • 숫자 검색
        • /[0-9]/ 와 같음
      • \D
        • 숫자가 아닌 문자를 검색
        • /[^0-9]/ 와 같음
      • \w
        • _를 포함한 영문자 및 숫자 검색
      • \W
        • _, 영문자, 숫자가 아닌 문자 검색
      • \s
        • 띄어쓰기, 탭, 줄바꿈 등 공백 문자 검색
      • \S
        • 띄어쓰기, 탭, 줄바꿈 등 공백 문자가 아닌 문자를 검색
      • \b
        • 단어의 맨 앞이나 맨 뒤가 패턴과 일치하는지 검색
      • \xhh
        • 16진수 hh에 해당하는 유니코드 문자 검색
      • \uhhhh
        • 16진수 hhhh에 해당하는 유니코드 문자 검색
  • 양화사(quantifier)
    • 수량을 나타내는 특수문자
    • 양화사 종류
      • n*
        • 바로 앞의 문자가 0번 이상 나타나는 경우 검색
        • /{0, }/와 같음.
      • n+
        • 바로 앞의 문자가 1번 이상 나타나는 경우 검색
        • /{1, } 와 같음
      • n?
        • 바로 앞의 문자가 0번 또는 1번만 나타나는 경우 검색
        • /{0, 1}/과 같음
    • 예시
      • var targetStr = "Hello World!";
        var zeroReg = /lo*/; // 문자 'l' 다음에 문자 'o'가 0번 이상 나타나는 경우를 검색함.
        var oneReg = /lo+/; // 문자 'l' 다음에 문자 'o'가 1번 이상 나타나는 경우를 검색함.
        var zeroOneReg = /lo?/; // 문자 'l' 다음에 문자 'o'가 0 또는 1번만 나타나는 경우를 검색함.
        
        targetStr.search(zeroReg);    // 2
        targetStr.search(oneReg);     // 3
        targetStr.search(zeroOneReg); // 2
  • 괄호 종류
    • a(b)c
      • 전체 패턴 검색 후 괄호 안 문자열 저장
      • ex) abc 검색 후 b 저장
    • [abc]
      • []안에 명시된 문자 검색
    • [0-3]
      • []안에 명시된 숫자들 검색
      • ex) 0~3까지 숫자 검색
    • [\b]
      • 백스페이스 문자 검색
    • {n}
      • 앞의 문자가 정확히 n번 나타나는 경우 검색
      • n은 양의 정수
    • {m, n}
      • 앞의 문자가 최소 m번 이상 n번 이하로 나타나는 경우 검색
      • m, n은 양의 정수
  • 위치문자
    • 패턴을 검색할 단어의 위치 지정
    • 위치문자 종류
      • ^a
        • 단어의 맨 앞에 위치한 해당 패턴만을 검색
        • ex) a로 시작하는 단어의 a만을 검색
      • a$
        • 단어의 맨 뒤에 위치한 해당 패턴만을 검색
        • ex) a로 끝나는 단어의 a만을 검색
    • 예시
      • var firstStr = "Php";
        var secondStr = "phP";
        var strReg = /^p/;  // 'p'로 시작하는 단어의 'p'만을 검색함.
        
        firstStr.match(strReg); // null
        secondStr.match(strReg); // p
  • RegExp 객체
    • RegExp 객체
      • 정규 표현식을 구현한 표준 내장 객체
    • 문법
      • new RegExp(검색패턴[, 플래그]);
        • 검색패턴은 따옴표나 슬래시로 감싸야 한다.
    • 관련 메소드
      • 정규식.exec(문자열);
        • 인수로 전달된 문자열에서 특정 패턴을 검색하여 패턴과 일치하는 문자열 반환, 없으면 null 반환
      • 정규식.test(문자열);
        • 인수로 전달된 문자열에 특정 패턴과 일치하는 문자열이 있는지 검색 (true/false 반환)
728x90