정규표현식 정리

Dongjun Ahn·2022년 6월 22일
0

여태 개발하면서 정규표현식은 필요할때마다 구글링해서 개발해 왔었다.
최근 필요성을 조금씩 느껴가면서 정리 해보려한다.

정규표현식?

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

https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions

문법(사용 방법)

정규식 플래그

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" 를 포함하는[다-바] 다 or 라
[^문자]		괄호안의 문자를 제외한 것[^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 ~ b자리 사이 문자열
/^[a-z0-9_-]{a,b}$/ 또는 /^[\w-_.]{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 태그
/\<(/?[^\>]+)\>/

전화 번호(예 123-123-2344 혹은 123-1234-1234)
/(\d{3}).*(\d{3}).*(\d{4})/

날짜(예, 3/28/2007 혹은 3/28/07)
/^\d{1,2}\/\d{1,2}\/\d{2,4}$/

jpg, gif, png 확장자를 가진 그림 파일명
/([^\s]+(?=\.(jpg|gif|png))\.\2)/

1부터 50 사이의 번호 – 1과 50 포함
/^[1-9]{1}$|^[1-4]{1}[0-9]{1}$|^50$/

16 진수로 된 색깔 번호
/#?([A-Fa-f0-9]){3}(([A-Fa-f0-9]){3})?/

6~20 영문 대소문자, 최소 1개의 숫자 혹은 특수 문자를 포함해야 함
/^(?=.*[a-zA-Z])((?=.*\d)|(?=.*\W)).{6,20}$/

8 ~ 10자 영문, 숫자 조합 
/^(?=.*\d)(?=.*[a-zA-Z])[0-9a-zA-Z]{8,10}$/;

특수문자 / 문자 / 숫자 포함 형태의 8~15자리 이내의 암호 정규식 
/^.*(?=^.{8,15}$)(?=.*\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&+=]).*$/

너무많다 모르겠는건 구글링 계속하자;

Reference

https://inpa.tistory.com/entry/JS-%F0%9F%93%9A-%EC%A0%95%EA%B7%9C%EC%8B%9D-RegExp-%EB%88%84%EA%B5%AC%EB%82%98-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-%EC%89%BD%EA%B2%8C-%EC%A0%95%EB%A6%AC

profile
Front-end Developer

0개의 댓글