Kawaii_Jordy

[JS] 정규 표현식 개념 및 활용법 본문

취준/일반 개발 지식

[JS] 정규 표현식 개념 및 활용법

Kawaii_Jordy 2021. 5. 10. 10:38

정규 표현식 정의

정규 표현식은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다. 대부분 문자열 검증에 사용이 되며 정규 표현식은 정규식, regex, regexp라 불리기도 한다.

표현식 의미
^ 문자열의 시작
$ 문자열의 종료
* 반복여부를 표현하며, 앞의 표현식이 0개 또는 0개이상 연속으로 반복되는 부분과 대응된다
(앞의 문자가 없거나 0개이상 또는 무한정으로 많은 경우)
+ 반복을 표현하며, 앞의 표현식이 1회이상 연속으로 반복되는 부분과 대응된다
(앞의 문자가 1개 이상인 경우)
? 존재여부를 표현하며, 앞의 표현식이 0또는 1회 등장하는 부분과 대응된다
(앞의 문자가 없거나 1개 있는 경우)
. 임의의 한 문자 자리수를 표현하며, 개행문자를 제회한 모든 단일 문자와 대응된다
(+. : 반드시 한개는 있어야됨)
| or을 표현하하며, 앞 또는 뒤에 문자가 존재함을 의미한다
[xy] 괄호는 일련의 문자를 찾는데 사용한다
[xy] : x와 y 중 하나를 의미
[^xy] : x y를 제외한 문자를 의미(^:부정)
[x-y] : x~z사이의 문자를 의미(-:범위를 나타낸다)
{n,m} 앞의 문자가 최소 n개, 최대 m개가 나타나는 경우
예를들어, {8,20} 비밀번호는 8자리에서 20자리를 입력해야 됨
() 그룹을 표현하며, 소괄호안의 문자를 하나의 문자로 인식한다
\s 공백(space)문자를 의미한다
\S 공백문자가 아닌 것을 의미한다 (not space)
\d 숫자 = [0-9]
\D 숫자를 제외한 모든 문자 = [^0-9]
\w 알파벳이나 숫자
\W 알파벳이나 숫자를 제외한 문자
(?!) 앞부분에 (?!) 넣어주면 대소문자를 구분하지 않는다

 

자주 사용되는 정규 표현식

의미 표현식
숫자만 /^[0-9]*$/
영문자만 /^[a-zA-Z]*$/
한글만 /^[가-힣]*$/
영어&숫자만 /^[a-zA-Z0-9]*$/
전화번호 /^\d{2,3}-\d{3,4}-\d{4}$/
: 시작을 숫자 2~3개로하며/하이픈/숫자가 3~4개 존재하며/하이픈/숫자 4개로 끝남
휴대폰 /^01(0|1|[6-9]?)-?([0-9]{3,4})-?([0-9]{4})$/
: 시작을 숫자 01로시작하며 그후에 0,1,6-9중에 하나가 오며/하이픈(존재할수도있으며)/숫자3~4개 존재하며/하이픈(존재할수도있으며)/숫자4개로 끝남
주민등록번호 /\d{6} \- [1-4]\d{6}/
email /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]*\.[a-zA-Z]{2,3}$/i
: 시작을 숫자 0~9 또는 a-z A-Z 알파벳으로 시작하며 중간에 -_ . 같은 문자가 있으수도 있으며 그후에 숫자 0~9 또는 a-z A-Z 알파벳중 하나의 문자가 없거나 연달아 올수있으며/ @반드시 존재하며/반드시 "." 존재하며/a-z A-Z 의 문자가 2,3개가 존재 / 이모든것은 대소문자 구분안함/
/^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i

 

정규 표현식에서의 FLAG

FLAG 의미
g 대상 문자열내의 모든 패턴들을 검색하는것을 의미한다.(global)
i 대소문자를 구분하지 않는다.(ignore case)
m 대상문자열이 다중라인의 문자열인 경우에도 검색하는것을 의미한다.(multi line)

 

JS에서 쓰이는 정규식 메소드

메소드 의미
test() 문자열에서 일치하는 항목을 검사하는 메소드로 true,false를 반환한다
search() 문자열이 있는지 검사하는 string 메소드이며, 대응된부분의 인덱스를 반환하며, 대응되는 문자열을 찾지 못했다면 -1을 반환한다
replace() 문자열을 찾아 다른 문자열로 치환하는 string메소드
match() 일치하는 문자열이 있다면 그 결과를 반환하고, 일치하는 문자열이 없으면 null을 반환한다

크롬 개발자 도구에서 간단하게 테스트를 해보자면

test()를 통해서 자연수인지 확인할 수 있는 간단한 정규식을 만들어 보았는데 잘 동작이 된다.

이번엔 match()를 통해서 "YYYY-mm-dd"형식이 맞는 지 체크하고 맞다면 YYYY, mm, dd 값을 반환해주는 테스트를 해보았다.

 

다양한 곳에서 정규 표현식이 사용되겠지만, API 설계 시 Query String이나 Path Variable의 값을 검증하는데 많이 사용되고 있다.

'취준 > 일반 개발 지식' 카테고리의 다른 글

[Network] HA Proxy  (0) 2021.06.16
[flaky test]  (0) 2021.06.03
[Flaky Test] 정의 및 주의할 점  (0) 2021.05.26
[regex] match  (0) 2021.05.26
[Swagger] 작성법 정리 및 예제 실습  (0) 2021.05.10
Comments