일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 프로그래머스
- 자바
- 디자인 패턴
- useEffect
- design pattern
- 코틀린
- websocket
- 자바 공부
- 데이터모델링과마이닝
- JavaScript
- 컴퓨터 네트워크
- 백준
- 프로그래머스 완전탐색
- 프로그래밍 언어론
- 리액트 훅
- react
- 프로그래머스 자바
- React JS
- react hook
- codesandbox
- useState
- NextJS
- vanillaJS
- 자바스크립트
- Java
- 리액트
- 코딩테스트 고득점 Kit 완전탐색
- react firebase
- 코딩테스트 고득점 Kit
- 장고
- Today
- Total
기록하는 개발자
[vanillaJs] 정규표현식을 예시와 함께 알아보자! 본문
Regular Expression: Regex
정규 표현식, 또는 정규식은 문자열에서 특정 문자 조합을 찾기 위한 패턴이다.
1. 정규표현식 형식
/ 패턴 / 플래그
- 슬래시(/)와 슬래시(/) 사이에는 매칭시킬 패턴을 써준다.
- 슬래시(/) 다음에는 옵션을 설정하는 플래그를 써준다.
*플래그는 하나만 찾을지, 모두 다 찾을지 등을 설정하는 옵션이다.
2. 정규표현식 매칭 패턴(문자, 숫자, 기호 등)
매칭 패턴을 사용하면, 문자/숫자/기호를 보다 쉽게 표현할 수 있다.
패턴 | 의미 |
a-zA-Z | 영어알파벳(-으로 범위 지정) |
ㄱ-ㅎ가-힣 | 한글 문자(-으로 범위 지정) |
0-9 | 숫자(-으로 범위 지정) |
. | 모든 문자열(숫자, 한글, 영어, 특수기호, 공백 모두! 단, 줄바꿈X) |
\d | 숫자 |
\D | 숫자가 아닌 것 |
\w | 영어 알파벳, 숫자, 언더스코어(_) |
\W | /w 가 아닌 것 |
\s | space 공백 |
\S | space 공백이 아닌 것 |
\특수기호 | 특수기호 |
3. 정규표현식 검색 패턴
아래 패턴들을 이용하면, AND, OR, StartWith, EndWith 등의 다양한 조합을 만들 수 있다.
기호 | 의미 |
| | OR |
[] | 괄호안의 문자들 중 하나 |
[^문자] | 괄호안의 문자를 제외한 것 |
^문자열 | 특정 문자열로 시작(괄호 없음 주의!) |
문자열$ | 특정 문자열로 끝남 |
() | 그룹 검색 및 분류(match메서드에서 그룹별로 묶어줌) |
(?: 패턴) | 그룹 검색(분류X) |
\b | 단어의 처음/끝 |
\B | 단어의 처음/끝이 아님 |
4. 정규표현식 수량 패턴
특정 패턴이 몇 번 반복되는지 필터링 할 수 있다.
기호 | 의미 |
? | 최대 한번(없음 || 한개) |
* | 없거나 있거나 (없음 || 있음): 여러개 포함 |
+ | 최소 한개(한개 || 여러개) |
{n} | n개 |
{Min,} | 최소 Min개 이상 |
{Min, Max} | 최소 Min개 이상, 최대 Max개 이하 |
5. 정규표현식 플래그
: 플래그는 동시에 여러개 사용할 수 있다. ex) gi, gm ...
플래그 | 의미 |
g | Global: 모든 문자 검색(안 쓰면 매칭되는 첫 문자만 검색) |
i | Ignore Case: 대소문자 구분 안함 |
m | Multi line: 여러 행의 문자열에 대해 검색 |
6. 메소드
메소드 | 기능 |
("문자열").exec(/정규표현식/플래그) | 문자열에서 일치하는 부분을 탐색하여 처음 매칭 되는 항목을 배열로 반환한다. 일치가 없는 경우 null을 반환 |
("문자열").test(/정규표현식/플래그) | 문자열에 일치하는 부분이 있는지 확인한다. true 또는 false를 반환 |
("문자열").match(/정규표현식/플래그) | "문자열"에서 "정규표현식"에 매칭되는 항목들을 배열로 반환한다. 일치가 없으면 null을 반환 |
("문자열").matchAll(/정규표현식/플래그) | "문자열"에서 "정규표현식"에 매칭되는 항목들과 함께 index, input, groups 3개의 프로퍼티를 배열로 반환한다. 일치가 없으면 null을 반환 |
("문자열").search(/정규표현식/플래그) | 문자열에서 일치하는 부분을 탐색한다. 일치하는 부분의 인덱스, 또는 일치가 없는 경우 -1을 반환한다. |
("문자열").replace(/정규표현식/플래그) | 문자열에서 일치하는 부분을 탐색하고, 그 부분을 대체 문자열로 변경 |
("문자열").replaceAll(/정규표현식/플래그) | 문자열에서 일치하는 부분을 모두 탐색하고, 모두 대체 문자열로 변경 |
("문자열").split(/정규표현식/플래그) | 정규 표현식 또는 문자열 리터럴을 사용해서 문자열을 부분 문자열의 배열로 나눈다. |
정규 표현식 만들기
정규 표현식은 두 가지 방법으로 만들 수 있다.
1. 정규 표현식 리터럴. 다음과 같이 슬래시로 패턴을 감싸서 작성한다.
const re = /ab+c/
정규 표현식 리터럴은 스크립트를 불러올 때 컴파일되므로, 바뀔 일이 없는 패턴의 경우 리터럴을 사용하면 성능이 향상될 수 있다.
2. RegExp 객체의 생성자 호출.
const re = new RegExp('ab+c')
정규표현식 활용 예시
/Number/ : 'Number'를 '하나'만 찾는다.
/Number/g: 'Number'를 '모두' 찾는다
/[A2.]/g: "A", "2", . 중에 하나를 모두 찾는다.
* 대괄호[]는 OR의 기능
/[0-9]/g : '숫자0~9'를 모두 찾는다.
/[a-zA-Z]/g : '영어알파벳 대문자/소문자'를 모두 찾는다.
/[^0-9]/g : '숫자0~9'가 아닌 것을 모두 찾는다.
* 대괄호[] 안에서 앞에 ^를 쓰면, 부정(Not)의 기능
1. 전화번호 정규 표현식
/ \d{2,3}-\d{3,4}-\d{4} /g
1) \d{2,3} → 숫자 2~3개로 시작한다.
2) \- → 다음에 하이픈(-)이 온다.
3) \d{3, 4} → 다음에 숫자가 3~4개 온다.
4) \- → 다음에 하이픈(-)이 온다.
5) \d{4} → 다음에 숫자가 4개 온다.
6) g → 매칭되는걸 모두 다 찾는다(플래그)
2. 웹사이트 주소 정규 표현식
/ https?:\/\/[\w\-\.]+ /g
1) http → 로 시작하고,
2) s? → 다음에 s는 없거나 있고,
3) : →다음에 : 가 오고,
4) \/\/ → 다음에 특수기호 // 가 오고
5) [\w\-\.]+ → \w(영문자, 언더스코어), 하이픈, 온점 으로 이루어진 문자열이 한개 이상(+) 있다.
6) g → 매칭되는걸 모두 다 찾는다.(플래그)
3. 이메일 정규 표현식
/ [\w\-\.]+\@[\w\-\.]+ /g
1) [\w\-\.]+ => \w(영문자, 언더스코어), 하이픈, 온점으로 이루어진 문자열이 한개 이상(+) 있다.
2) @ → 다음에 @ 가 오고,
3) [\w\-\.]+ => \w(영문자, 언더스코어), 하이픈, 온점으로 이루어진 문자열이 한개 이상(+) 있다.
4) g => 매칭되는걸 모두 다 찾는다.(플래그)
4. 특수기호 정규표현식
1) 모든 특수기호를 나열
- 원하는 특수기호만 선택하여 검사할 수 있다.
- 하나씩 입력해줘야하므로 특정 기호를 빼먹을 수 있다.
const regex = /\[\]\{\}\/\(\)\.\?\<\>!@#$%^&*/g
2) 문자와 숫자가 아닌 것을 매칭
- [^영어^숫자^한글] 패턴 사용
- 모든 특수기호를 검사할 수 있다.
const regex = /[^a-zA-Z0-9가-힣ㄱ-ㅎ]/g
5. 특정 단어로 끝나는지 검사
const file = 'index.js';
// 'js'로 끝나는지 검사
// $ : 문자열의 끝을 의미한다.
const regex = /js$/;
참고
https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions
https://curryyou.tistory.com/234
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
'Web > Javascript' 카테고리의 다른 글
[vanillaJs] Fetch와 Axios를 비교해보자! (0) | 2022.09.03 |
---|---|
[vanillaJs] 프레임워크없이 SinglePageApplication 만들기-3.동적라우팅 (0) | 2022.09.03 |
[vanillaJs] 프레임워크없이 SPA 만들기-2. 라우팅 페이지 구성 (0) | 2022.09.01 |
[vanillaJs] 프레임워크없이 SPA 만들기-1. 라우팅 설정하기 (0) | 2022.08.31 |
[Javascript] JS DOM 이란? (1) | 2022.01.10 |