정규표현식 정리

GooGu·2024년 6월 28일

개발지식

목록 보기
6/7

정규표현식 ?

정규표현식(Reqular Expression)은 모든 종류의 문자열에서 특정 내용을 찾거나 대체 또는 발췌하는데 사용한다.
RegExp의 exec 메소드와 test 메소드, 그리고 String의 match메소드, replace메소드, search메소드, split메소드와 함께 쓰인다.

정규식 플래그

i : 대소문자를 구별하지 않음
g : 문자열 내의 모든 패턴을 검색(전역매칭)
m : 문자열의 행이 바뀌더라도 검색
s : 공백 문자(스페이스,탭, 폼 피드, 라인 피드), 개행 문자(\n)포함
u : 유니코드 전체를 지원
y : 문자 내 특정 위치에서 검색을 진행하는 'sticky' 모드를 활성화

정규식 매칭 패턴(문자,숫자,기호 등)

a-zA-Z : 영어알파벳(-으로 범위 지정)
ㄱ-ㅎ가-힣 : 한글 문자(-으로 범위 지정)
0-9 : 숫자로(-으로 범위 지정)
. : 모든 문자열(숫자,한글,영어,특수기호,공백 모두 .. 단 줄바꿈 x)
\d : 숫자
\D : 숫자가 아닌 것
\w : 밑줄 문자를 포함한 영숫자 문자에 대응[A-Za-z0-9_] 와 동일
\W : \w가 아닌 것
\s : space 공백
\S : space 공백이 아닌 것
\특수기호 : 특수기호 \* \^ \& \! \? ...등
\b : 63개 문자(영문 대소문자 52개 + 숫자 10개  + _(underscore) ) 가 아닌 나머지 문자에 일치하는 경계(boundary)
\B : 63개 문자에 일치하는 경계 
\x : 16진수 문자에 일치, /\x61/는 a에 일치
\0 : 8진수 문자에 일치, /\141/은 a에 일치
\u : 유니코드(Unicode) 문자에 일치, /\u0061/ 은  a에 일치
\c : 제어(Control) 문자에 일치 
\f : 폼 피드(FF, U+000C)문자에 일치 
\n : 줄 바꿈(LF, U+000A)문자에 일치
\r : 캐리지 리턴(CR, U+000D) 문자에 일치
\t : 탭(U+0009) 문자에 일치 

정규표현식 검색 패턴

|   : OR a|b
\[] : 괄호안의 문자들 중 하나. or처리라고 보면 된다. /abc/ "abc"를 포함하는 /[abc]/ "a" 또는 "b" 또는 "c" 를 포함
\[^문자] : 괄호안의 문자를 제외한 것 \[^lgEn] "l", "g", "E", "n" 4개 문자를 제외 
^문자열 : 특정 문자열로 시작 /^www/
문자열$ : 특정 문자열로 끝남 /com$/

정규표현식 갯수(수량) 반복 패턴

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

정규표현식 그룹

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

정규표현식 주요 메소드

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

자주 쓰는 정규표현식

- /^[0-9]+$/ : 숫자만 가능, 띄어쓰기 불가능
- /^[가-힣]+$/ : 한글만 가능, ㄱㄴㄷ 불가능, 띄어쓰기 불가능 
/^[가-힣\s]+$/ : 한글, 띄어쓰기만 가능, ㄱㄴㄷ...형식으로는 입력 불가능, 띄어쓰기 가능
/^[a-zA-Z]+$/ : 영문만 가능, 띄어쓰기 불가능
/^[a-zA-Z\s]+$/ : 영문만 가능, 띄어쓰기 가능
/^[가-힣a-zA-Z]+$/ : 한글과 영문만 가능 
/^[a-zA-Z0-9]+$/ : 숫자, 알파벳만 가능
/^[a-z0-9_-]{a,b}$/ 또는 /^[\w-_.]{a,b}$/ : 영문자 소문자, 숫자, "-" ,"_" 로만 구성된 길이 a~b자리 사이 문자열 
/^[a-z0-9_+.-]+@([a-z0-9-]+\.)+[a-z0-9]{2,4}$/     : 이메일 
/^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/   : 핸드폰
/\<(/?[^\>]+)\>/  :  HTML 태크  --> \<[a-zA-z0-9]*\>  
(\d{3})-?(\d{3})-?(\d{4})  : 전화번호  (-? : 번호사이의 대시(-) 는 사용하든 안 하든 상관 없다)
/^\d{1,2}\/\d{1,2}\/\d{2,4}$/    : 날짜 (예, 3/28/2007  혹운 3/28/07)
/([^\s]+(?=\.(jpg|gif|png))\.\2)/ : jpg,gif,png 확장자를 가진 그림 파일명   -> ([a-zA-Z0-9]+(?=\.(jpg|gif|png))\.\2)
/^[1-9]{1}$|^[1-4]{1}[0-9]{1}$|^50$/  : 1부터 50 사이의 번호 (1과 50포함)
/#?([A-Fa-f0-9]){3}(([A-Fa-f0-9]){3})?/  : 16 진수로 된 색깔 번호
/^(?=.*[a-zA-Z])((?=.*\d)|(?=.*\W)).{6,20}$/  : 6~20 영문 대소문자, 최소 1개의 숫자 혹은 특수 문자를 포함해야 함
/^(?=.*\d)(?=.*[a-zA-Z])[0-9a-zA-Z]{8,10}$/  :  8~10자 영문, 숫자 조합
/^.*(?=^.{8,15}$)(?=.*[a-zA-Z)(?=.*[!@#$%^&+=]).*$/  : 특수문자 / 문자/ 숫자 포함 형태의 8~15자리 이내의 암호 정규식

정규식 테스트 가능 사이트 https://regex101.com/

참고 https://velog.io/@ahndong2/%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D-%EC%A0%95%EB%A6%AC

0개의 댓글