[JS] 정규 표현식(Regular Expression) 문법 정리 및 예제

장택진·2023년 4월 29일
0

정규 표현식(Regular Expression) 은 문자열에서 특정 내용을 찾거나 대체하는데 사용한다.
대표적인 예로는 이메일이나 전화번호를 입력하라고 했을때 특정 양식에 맞지 않는 값을 입력하면 필터링되어 경고창이 뜨게 되는데 그 때 사용되는게 정규표현식이다.

이처럼 조건문과 반복문 떡칠을 해야 할 것 같은 복잡한 코드들도 정규표현식을 이용하면 매우 간단하게 처리할 수 있다.

전화번호 양식을 검사한다면

  • 3자리-3~4자리-4자리(사이에 1자 아무거나 가능))
    -> /^[(]?[0-9]{3}[)]?[-\s.]?[0-9]{3,4}[-\s.]?[0-9]{4}$/
  • 3자리-3~4자리-4자리(사이에 "-" 고정)
    -> /^\d{3}-\d{3,4}-\d{4}$/
  • 휴대폰&전화번호
    -> /(^02.{0}|^01.{1}|[0-9]{3})([0-9]+)([0-9]{4})/
  • 휴대폰번호
    -> /^01(?:0|1|[6-9])[.-]?(\d{3}|\d{4})[.-]?(\d{4})$/

이런식으로 해결할 수 있다 ! 코테 스터디 팀원분이 정리해놓은 글을 보고 나도 정리해두고 두고두고 봐야겠다는 생각이 들었다.

정규식 메서드

  • ("문자열").match(/정규표현식/플래그)
    -> "문자열"에서 "정규표현식"에 매칭되는 항목들을 배열로 반환
  • ("문자열").replace(/정규표현식/, "대체문자열")
    -> "정규표현식"에 매칭되는 항목을 "대체문자열"로 변환
  • ("문자열").split(정규표현식)
    -> "문자열"을 "정규표현식"에 매칭되는 항목으로 쪼개어 배열로 반환
  • (정규표현식).test("문자열")
    -> "문자열"이 "정규표현식"과 매칭되면 true, 아니면 false반환
  • (정규표현식).exec("문자열")
    -> match메서드와 유사(단, 무조건 첫번째 매칭 결과만 반환)

정규식 플래그

정규식 플래그는 정규식을 만들 때 고급 검색을 위한 전역 옵션을 설정할 수 있도록 지원하는 기능이다.

  • i (Ignore Case)
    -> 대소문자를 구별하지 않고 검색한다.
  • g (Global)
    -> 문자열 내의 모든 패턴을 검색한다.
  • m (Multi Line)
    -> 문자열의 행이 바뀌더라도 검색을 계속한다.
  • s
    -> ​(모든 문자 정규식)이 개행 문자 \n도 포함하도록
  • u (unicode)
    -> 유니코드 전체를 지원
  • y (sticky)
    -> 문자 내 특정 위치에서 검색을 진행하는 ‘sticky’ 모드를 활성화

정규식 검색 기준 패턴

  • |
    -> OR , a|b
  • []
    • 괄호안의 문자들 중 하나. or 처리 묶음 보면 된다.
    • /abc/ : "abc"를 포함하는
    • /[abc]/ : "a" 또는 "b" 또는 "c" 를 포함하는
    • [다-바] : 다 or 라 or 마 or 바
  • [^문자]
    • 괄호안의 문자를 제외한 것
    • ex) [^lgEn] => "l" "g" "E" "N" 4개 문자를 제외
    • ※ 대괄호 안에서 쓰면 제외의 뜻, 대괄호 밖에서 쓰면 시작점 뜻
  • ^문자열
    -> 특정 문자열로 시작 (시작점) ex) /^www/
  • 문자열$
    -> 특정 문자열로 끝남 (종착점) ex) /com$/

정규식 갯수 반복 패턴

  • ?
    -> 없거나 or 최대 한개만 ex) /apple?/
  • '*'
    -> 없거나 or 있거나 (여러개) ex) /apple*/
  • +
    -> 최소 한개 or 여러개 ex) /apple+/
  • *?
    -> 없거나, 있거나 and 없거나, 최대한개 : 없음 // {0}와 동일
  • +?
    -> 최소한개, 있거나 and 없거나, 최대한개 : 한개 // {1}와 동일
  • {n}
    -> n개
  • {Min,}
    -> 최소 Min개 이상
  • {Min, Max}
    -> 최소 Min개 이상, 최대 Max개 이하 // {3,5}? == {3}와 동일

정규식 그룹 패턴

  • ()
    -> 그룹화 및 캡쳐
  • (?: 패턴)
    -> 그룹화 (캡쳐 X)
  • (?=)
    -> 앞쪽 일치(Lookahead), ex) /ab(?=c)/
  • (?!)
    -> 부정 앞쪽 일치(Negative Lookahead), ex) /ab(?!c)/
  • (?<=)
    -> 뒤쪽 일치(Lookbehind), ex) /(?<=ab)c/
  • (?<!)
    -> 부정 뒤쪽 일치(Negative Lookbehind), ex) /(?<!ab)c/

정규식 캡처 기능

캡처는 쉽게 생각하면 복사본을 생성하는 것이다. (실제 개념과는 다르지만 이해할 땐 이렇게 이해했다.)

정규식의 캡처 원리는 패턴 () 안에 있는 대상들을 그룹화하여 캡처(복사)한다.
캡처된 표현식은 당장 사용하지 않으며, 캡처를 제외한 표현식들이 모두 작동하고 난 뒤 캡처된 표현식을 검색한다. 이 기능에 대해선 다음 알고리즘 문제 포스팅때 사용하도록 할 예정이다

참고 사이트

profile
필요한 것은 노력과 선택과 치킨

0개의 댓글