본문 바로가기
Javascript/JavaScript_스터디

정규표현식(Regular Expression)

by 사장님나빠여 2023. 2. 12.

정규표현식은 문자열의 일정한 패턴을 표현하는 규칙이다.(정규식이라고도 부름)

자바스크립트에서는 RegExp 객체(RegExp 생성자는 패턴을 사용해 텍스트를 판별할 때 사용)와 RegExp 메서드, 문자열 메서드를 이용해 정규표현식을 사용할 수 있다.

 

1. 정규식 리터럴 사용

const reg = /ab+c/;

2. RegExp 객체의 생성자 함수 호출

const reg = new RegExp("ab+c");

정규식 패턴 작성 시, 정해진 규칙에 따라 작성

 

# 정규표현식이 필요할 때

- 각각 다른 포맷으로 저장된 엄청나게 많은 전화번호 데이터를 추출해야 할 때

- 사용자가 입력한 이메일, 휴대폰 번호, IP 주소 등이 올바른지 검증하고 싶을 때

- 코드에서 특정 변수의 이름을 치환하고 싶지만, 해당 변수의 이름을 포함하고 있는 함수는 제외하고 싶을 때

-특정 조건과 위치에 따라서 문자열에 포함된 공백이나 특수문자를 제거하고 싶을 때

 

#정규표현식의 단점

-여러가지 기호를 혼합해서 사용하기 때문에 가독성이 좋지 않다

 

# 정규식 구성

- /(슬래시) : 시작, 종료 기호

- 슬래시 사이에 있는 요소 : 패턴

- 슬래시 뒤에 붙는 문자 :  플래그

 

# 정규식 메서드

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

예시)

//정규식 표현을 담은 변수
const regex = /abc/; abc라는 단어가 있는지 필터링

//"문자열"이 "정규표현식"과 매칭되면 true, 아니면 false반환
regex.test("abcd efghi jklmnop"); //true

//"문자열"에서 "정규표현식"에 매칭되는 항목들을 배열로 반환
const txt = "Hi this is abc"; 
txt.match(regex); //['abc']

//"정규표현식"에 매칭되는 항목을 "대체문자열"로 변환
txt.replace(regex, "cba"); //"Hi this is cba";

 

# 정규식 플래그

- 정규식 플래그는 정규식을 생성할 때 고급 검색을 위한 전역옵션을 설정할 수 있도록 지원하는 기능

//RegExp 객체 사용시 flags에 플래그 문자열이 들어간다
const flags = "i";
const regex = new RegExp('apabcpple', flags);

//리터럴로 슬래쉬 문자뒤에 바로 표현이 가능
const regex1 = /apple/i;
const regex2 = /apple/gm;
Flag Meaning Description
i Ignore Case 대소문자를 구별하지 않고 검색한다
g Global 문자열 내의 모든 패턴을 검색한다
m Multi Line 문자열의 행이 바뀌더라도 검색을 계속한다
s   .(모든 문자 정규식)이 개행 문자 \n도 포함하도록
u unicode 유니코드 전체를 지원
y sticky 문자 내 특정 위치에서 검색을 진행하는 'sticky' 모드를 활성화

 

# 정규표현식 특정 문자 숫자 매칭 패턴

패턴 의미
a-zA-Z 영어알파벳(-으로 범위지정)
ㄱ-ㅎ가-힣 한글 문자(-으로 범위 지정)
0-9 숫자(-으로 범위 지정)
. 모든 문자열(숫자, 한글, 영어, 특수기호, 공백 모두! 단, 줄바꿈 x)
\d 숫자
\D 숫자가 아닌 것
\w 영어 알파벳, 숫자, 언더스코어(_)
\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 폼 피드(FF, U+000C) 문자에 일치
\n 줄 바꿈(LF, U+000A) 문자에 일치
\r 캐리지 리턴(CR, U+000D) 문자에 일치
\t 탭(U+0009) 문자에 일치

 

# 정규표현식 검색 패턴

:아래 패턴들을 이용하면 AND, OR, StartWith, EndWith 등의 다양한 조합을 만들 수 있다

기호 의미
| OR
[ ] 괄호안의 문자들 중 하나
[^문자] 괄호안의 문자를 제외한 것
^문자열 특정 문자열로 시작(괄호 없음 주의)
문자열$ 특정 문자열로 끝나
( ) 그룹 검색 및 분류(match)메서드에서 그룹별로 묶어줌)
(?:패턴) 그룹 검색(분류x)
\b 단어의 처음/끝
\B 단어의 처음/끝이 아님

 

 

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

기호 의미
? 없거나 or 최대 한개만 /abc?/
* 없거나 or 있거나(여러개) /abc*/
+ 최소 한개 or 여러개 /abc+/
*? 없거나, 있거나 and 없거나, 최대 한개 : 없음 {0} 와 동일
+? 최소 한개, 있거나 and 없거나, 최대 한개: 한개 {1}와 동일
{n} n개
{Min, } 최소 Min 이상
{Min, Max} 최소 Min이상, 최대 Max개 이하

 

# 정규식 그룹 패턴

기호 의미
( ) 그룹화 및 캡쳐
(?:패턴) 그룹화(캡쳐x)
(?=) 앞쪽 일치(Lookahead), /ab(?=c)/
(?!) 부정 앞쪽 일치 (Negative Lookahead), /ab(?!c)/
(?<=) 뒤쪽 일치(Lookbehind), /(?<=ab)c/
(?<!) 부정 뒤쪽 일치(Negative Lookbehind), /(?<!ab)c/

 


 

참고 : 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

댓글