정규 표현식(Regular Expression)은 문자열에서 특정 내용을 찾거나 대체 또는 발췌할 때 사용된다.
정규 표현식을 생성하는 방식에는 생성자
방식과 리터럴
방식이 있다.
// 생성자
new RegExp('표현', '옵션')
new RegExp('[a-z]','gi')
// 리터럴
/표현/옵션
/[a-z]/gi
정규 표현식을 다루는 데에는 여러가지 메서드가 있다.
//예제 코드
const str = `
010-1234-5678
hellow@naver.com
https://www.naver.com
The quick brown fox jumps over the lazy dog.
abbcccddd
the
`;
//리터럴 방식으로 정규 표현식 생성
const regexp = /fox/gi;
console.log(regexp.test(str)); // true 출력
test
는 일치하는 문자의 유무를 확인하고 Boolean
타입의 데이터를 리턴해주는 메서드이다. 정규식.test(문자열)
형식으로 사용해야 한다.
const regexp = /hi/gi;
console.log(str.replace(regexp,'fox'); // fox를 hi로 대체
replace
는 문자열을 대체해주는 메서드이다. 문자배열을 리턴하며 문자열.replace(정규식,대체문자)
형식으로 사용된다.
const regexp = /fox/gi;
console.log(str.match(regexp) //[fox] 반환
match
는 일치하는 문자의 배열(Array)을 반환해주는 메서드이다.
문자열.match(정규식)
형식으로 사용된다.
플래그 | 설명 |
---|---|
g | 모든 문자일치(global) |
i | 영어 대소문자를 구분 않고 일치(ignore case) |
m | 여러 줄 일치(multi line) |
u | 유니코드(unicode) |
y | lastIndex 속성으로 지정된 인덱스에서만 1회 일치(sticky) |
위에서 표현 뒤에 '옵션'이 붙는 것을 볼 수 있다. 동일한 메서드를 사용하더라도 다른 옵션을 붙이면 결과 값이 다르게 나온다.
패턴은 정규 표현식에 사용되는 표현으로 형식이 특이하기 때문에 직관적으로 이해하기 어렵다. 따라서 암기해두는 것이 좋다.
console.log(str.match(/m$/gm)); // ["m","m"] 출력
$
기호는 문자열의 끝을 의미한다. gm
옵션이 붙었으므로 예시 문자열에 hellow@naver.com
와 https://www.naver.com
가 선택되게 된다.
console.log(str.match(/^0/gm)); // ["m","m"] 출력
^
기호는 문자열의 시작을 의미한다. 예시 문자열에서 010-1234-5678
가 선택되게 된다.
자주 사용되는 패턴 | 설명 |
---|---|
^ab | 줄(Line) 시작에 있는 ab와 일치 |
ab$ | 줄(Line) 끝에 있는 ab와 일치 |
. | 임의의 한 문자와 일치 |
a|b | a 또는 b와 일치 |
ab? | b가 없거나 b와 일치 |
{3} | 3개 연속 일치 |
{3,} | 3개 이상 연속 일치 |
{3,5} | 3개 이상 5개 이하(3~5개) 연속 일치 |
[abc] | a 또는 b 또는 c |
[a-z] | a 부터 z 사이의 문자 구간에 일치(영어 소문자) |
[A-Z] | A 부터 Z 사이의 문자 구간에 일치(영어 대문자) |
[0-9] | 0 부터 9 사이의 문자 구간에 일치(숫자) |
[가-힣] | 가부터 힣 사이의 문자 구간에 일치(한글) |
\w | 63개 문자 (Word, 대소영문 52개 + 숫자 10개 + _)에 일치 |
\b | 63개 문자에 일치하지 않는 문자 경계(Boundary) |
\d | 숫자(Digit)에 일치 |
\s | 공백(Space, Tab 등)에 일치 |
(?=) | 앞쪽 일치 (Lookahead) |
(?<=) | 뒤쪽 일치 (Lookbehind) |