정규표현식

정규표현식

  • 문자열에 나타나는 특정 문자 조합과 대응시키기 위해 사용되는 패턴
  • 정규식에서 쓰이는 메소드
    • RegExp : exec 메소드, test 메소드
    • String : match 메소드, replace 메소드, search 메소드, split 메소드

문법 정리

그룹 및 범위

기호
또는
() 그룹
[] 문자셋, 괄호안의 어떤 문자든
[^] 부정 문자셋, 괄호안의 어떤 문자가 아닐 때
(?:) 찾지만 기억하지는 않음
(?=) 앞쪽 문자열을 기준으로 그룹 조건을 만족하는지 비교하나, 기억하지는 않음
(?!) 앞쪽 문자열을 기준으로 그룹 조건을 만족하지 않는지를 비교하나, 기억하지는 않음
(?<=) 뒤쪽 문자열을 기준으로 그룹 조건을 만족하는지 비교하나, 기억하지는 않음
(?<!) 뒤쪽 문자열을 기준으로 그룹 조건을 만족하지 않는지를 비교하나, 기억하지는 않음

수량

기호
? 없거나 있거나 (zero or one)
* 없거나 있거나 많거나 (zero or more)
+ 하나 또는 많이 (one or more)
{n} n번 반복
{min,} 최소
{min,max} 최소, 그리고 최대

경계 종류

기호
\b 단어 경계
\B 단어 경계가 아님
^ 문장의 시작
$ 문장의 끝

Character classes

기호
\ 특수 문자가 아닌 문자
. 어떤 글자 (줄바꿈 제외)
\d 숫자
\D 숫자가 아닌 것
\w 문자
\W 문자가 아닌 것
\s 공백
\S 공백가 아닌 것

이전 1차 프로젝트 당시, 정규표현식을 이용해 기능을 구현했는데 많은 글을 보니 정규표현식은 예제로 대체한다하여 그대로 붙여서 썼는데, 이메일은 RFC 5322 기준이었다…😂 그 코드가 바로 아래이다…

//email RFC 5322
/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;

그리하여 정규 표현식 공부 후 이메일 정규표현식 리팩토링을 진행하였다. [영문•숫자•일부 특수문자]+@[영문•숫자]+\.(특수문자 .)[영문•숫자•.]+ /^[a-zA-Z0-9.^+_-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9.]+$/

앞으로는 제대로 알고쓰기….반성하는 계기가 되었다 🙇🏻‍♀️❗️