💡 문자열에서 특정 문자 조합을 찾기 위한 패턴이다.
RegExp의 exec()와 test() 메서드를 사용할 수 있다.
String의 match(), matchAll(), replace(), replaceAll(), search(), split()에 사용할 수 있다.
정규 표현식을 만드는 두 가지 방법이 있다.
/패턴/new RegExp('패턴')// 1. 정규 표현식 리터럴
const re1 = /ab+c/;
// 2. RegExp 객체 생성자 호출
const re2 = new RegExp('ab+c');
정규 표현식 패턴은 문자, 문자와 특수 문자 등의 조합으로 구성될 수 있다.
-: 범위(어디에서 어디까지)
a-z : a에서 z까지를 의미0-9 : 0에서 9까지를 의미ㄱ-ㅎ : ㄱ에서 ㅎ까지를 의미ㅏ-ㅣ : ㅏ에서 ㅣ 까지를 의미가-힣 : '가'에서 '힣'까지를 의미
[]: 괄호 안에 문자중 1개
[a-z] : a에서 z중 하나.[abc]d : ad, bd, bd를 의미
[^]: 괄호안의 문자 부정(제외)
[^a-z] : a ~ z를 제외한 모든 문자[^0-9] : 숫자를 제외한 모든 문자
^: 문자열의 처음
^[a-zA-Z] : 영문자로 시작해야함
$: 문자열의 끝
[a-zA-Z]$ : 영문자로 끝나야함^[a-zA-Z]$ : 영문자로 시작하고, 영문자로 끝나야함
|: 또는(OR)
[a-z|A-Z] : a ~ z 또는 A ~ Z 의미(영어 전체)[ㄱ-ㅎ|ㅏ-ㅣ|가-힣] : ㄱ ~ ㅎ 또는 ㅏ ~ ㅣ 또는 가 ~ 힣 의미(한글 전체)
*: 0회 이상(여러개)
^[a-zA-Z]*$ : 여러개의 문자가 모두 영문자여야 함^[0-9]*$ : 여러개의 문자가 모두 숫자여야 함^[a-zA-Z0-9]*$ : 여러개의 문자가 모두 영문자나 숫자여야 함
{m, n}: m회 이상, n회 이하
^[a-zA-Z]*${1, 10} : 영문자 1자 이상, 10자 이하replace()는 있지만 replaceAll()은 없다.gi가 가장 자주 쓰인다.// 1. 정규 표현식 리터럴
const re1 = /pattern/flags;
// 2. RegExp 객체 생성자 호출
const re2 = new RegExp('pattern', 'flags');
g: 전역 탐색
const re1 = /[1]/;
const str1 = '010-1111-2222';
console.log(str1.replace(re1, 3)); // 030-1111-2222
const re2 = /[1]/g;
// 또는
// const re1 = new RegExp('1', 'g');
const str2 = '010-1111-2222';
console.log(str2.replace(re2, 3)); // 030-3333-2222
i: 대소문자를 구분하지 않음
const re1 = /[a]/;
const str1 = 'A';
console.log(str1.replace(re1, 'b')); // A
const re2 = /[a]/i;
// 또는
// const re2 = new RegExp('A', 'i');
const str2 = 'A';
console.log(str2.replace(re2, 'b')); // B
d: 부분 문자열 일치에 대해 인덱스 생성
m: 여러 줄에 걸쳐 탐색
s: 개행 문자가 .과 일치함
u: "unicode", 패턴을 유니코드 코드 포인트의 시퀀스로 간주함
y: "접착" 탐색, 대상 문자열의 현재 위치에서 탐색을 시작함