본문 바로가기
자바스크립트(JavaScript)/자바스크립트

[JavaScript] 정규 표현식, 정규식(Regular Expression)

by yerica 2024. 12. 19.

정규 표현식(Regular Expression) 또는 정규식은 특정 문자 조합을 찾기 위한 패턴으로, 문자열에서 특정 패턴을 찾거나, 대체하거나, 분리하는데 사용된다.

JavaScript에서 사용되는 정규식은 객체로서, 리터럴 표현으로 생성하거나 RegExp() 객체를 생성하여 사용할 수 있다.

정규식 리터렬 표현은 /패턴/플래그 형식으로 구성되고, RegExp() 객체로 생성할 경우 new RegExp('패턴', '플래그')로 생성하여 사용된다.


정규식 기본형

 

1. 정규식 리터럴 표현

백슬러시( / )로 시작과 끝을 정의한다.
백슬러시 사이에는 검색하고자 하는 패턴을 정의하고 뒤에 플래그를 붙여 동작 방식을 제어한다.
/패턴/플래그

 

2. 정규식 객체 생성

RegExp 생성자를 사용하면 정규식 객체를 만들 수 있다.
new RegExp('문자', '플래그')

정규식 구성 요소

 

정규식은 /패턴/플래그 형식으로 구성되어있다.

정규식의 주요 패턴으로는 문자 리터럴, 메타문자, 수량자, 그룹화, 캡처, 선택, 이스케이프, 문자 클래스 등이 있다.

이를 활용하여 패턴을 구성한 후, 필요할 경우 정규식 플래그를 붙여 사용한다.


정규식 패턴

 

1. 리터럴 문자

슬러시( / )사이에 입력한 문자열과 정확히 일치하는 패턴을 찾는다.
const regex = /hello/;
console.log('hello world'.match(regex)); // ['hello']

2. 메타문자

메타문자는 특별한 의미를 가지고 있는 문자를 말한다.

3. 이스케이프 ( \ )

만약 특수 문자를 리터럴 문자로 사용하고 싶다면 앞에 백슬래시( \ )를 붙여 사용한다.
백슬래시는 키보드에서 백스페이스 옆에있는데, 키보드에 따라 원화모양일 수도, 백슬래시 모양일 수도 있다.
const regex = /\./; // '.'을 문자로 찾음
console.log('a.b'.match(regex)); // ['.']

 

4. 수량자

수량자는 특정 패턴이 얼마나 반복되는지 정의한다.

 

5. 그룹화와 캡처

소괄호 () 를 사용하여 패턴을 그룹화한다. 그룹화 안에 ?:를 붙일 경우 캡처하지 않고 그룹화한다.
const regex = /(abc)+/;
console.log('abcabc'.match(regex)); // ['abcabc', 'abc', index:0, input:'abcabc', groups: undefined]

const regex2 = /(?:abc)+/;
console.log('abcabc'.match(regex2)); // ['abcabc', index:0, input:'abcabc', groups: undefined]

 

6. 선택

문자 | 을 활용하여 OR 조건을 만든다.
const regex = /cat|dog/;
console.log('I have a cat'.match(regex)); // ['cat']

 

7. 문자 클래스

중괄호 [ ] 안에 특정 문자를 정의하여 매칭한다.


정규식 플래그

 

정규식의 동작 방식을 제어하는 옵션이다.

예시로 문자열에서 숫자를 추출해 보겠다.
const str = 'abc123def456';
const numbers = str.match(/\d+/g);
console.log(numbers); // 출력: ['123', '456']​

\d+ 하나 이상의 숫자 연속을 말하고, g 플래그는 전역 검색 (모든 매칭을 찾음)한다.
match() 메서드는 매칭된 문자열들의 배열을 반환한다.

자주 사용하는 패턴

 

1. 숫자만 추출

const regex = /\d+/g;
console.log('123abc456'.match(regex)); // ['123', '456']

2. 이메일 주소 추출

const regex = /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/;
console.log('test@example.com'.match(regex)); // ['test@example.com']

3. 이메일 주소 유효성 검사

const email = 'test@example.com';
const emailRegex = /^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,}$/;
console.log(emailRegex.test(email)); // 출력: true

4. 특정 문자열 치환

const str = 'hello world';
const result = str.replace(/world/, 'JavaScript');
console.log(result); // 'hello JavaScript'
const text = 'Hello 2021, welcome to 2022!';
const newText = text.replace(/\d{4}/g, 'YEAR');
console.log(newText); // 출력: 'Hello YEAR, welcome to YEAR!'

5. 공백 제거

const str = '  Hello World  ';
const trimmed = str.replace(/^\s+|\s+$/g, '');
console.log(trimmed); // 출력: 'Hello World'

6. URL 검증

const url = 'https://www.example.com';
const urlRegex = /^(https?:\/\/)?([\w.-]+)\.([a-zA-Z]{2,6})(\/[\w.-]*)*\/?$/;
console.log(urlRegex.test(url)); // 출력: true

정규식 학습을 위한 팁

 

1. 정규식 테스트 사이트

Regex101(https://regex101.com/) 나 RegExr(https://regexr.com/) 과 같은 사이트를 사용하면
정규식을 실시간으로 테스트하고 이해할 수 있다.

2. 문서 참고

MDN과 같은 정규 표현식에 대한 설명이 담긴 문서를 참고하면 좋다.

 

* mdn 정규표현식mdn ReqExp