정규표현식은 문자열의 일정한 패턴을 표현하는 규칙이다.(정규식이라고도 부름)
자바스크립트에서는 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/ |
'Javascript > JavaScript_스터디' 카테고리의 다른 글
| 빅오 표기법(Big O Notation) (0) | 2023.03.15 |
|---|---|
| Geolocation / openweathermap.org 이용방법 (0) | 2022.08.14 |
| JSON.stringify()와 JSON.parse() (0) | 2022.08.12 |
| [자바스크립트] async와 defer (0) | 2022.04.21 |
| [JavaScript_DeepDive] 19. 프로토타입(1) (0) | 2022.03.31 |
댓글