💡 문자열에서 특정 문자 조합을 찾기 위한 패턴이다.
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
: "접착" 탐색, 대상 문자열의 현재 위치에서 탐색을 시작함