JavaScript RegExp
JavaScript RegExp: 정규 표현식의 이해와 활용
JavaScript RegExp(정규 표현식, Regular Expression)는 문자열 내에서 특정 패턴을 검색하거나 일치하는 부분을 추출, 대체하는 데 사용되는 강력한 도구입니다. 정규 표현식은 특정 텍스트 패턴을 정의하고, 이를 통해 텍스트에서 일치하는 부분을 찾거나 변경하는 데 유용합니다.
이 가이드는 JavaScript에서 **정규 표현식(RegExp)**의 기본 사용법과 다양한 패턴, 그리고 주요 메서드를 설명합니다.
1. 정규 표현식의 기본 개념
정규 표현식은 특정 패턴을 표현하는 문자열입니다. 이를 통해 문자열을 검색하거나 조작할 수 있으며, 문자열 검색, 검증, 치환 작업에 많이 사용됩니다.
1.1. 정규 표현식 생성 방법
JavaScript에서 정규 표현식을 생성하는 방법은 두 가지입니다.
1.1.1. 리터럴 표기법
리터럴 표기법은 슬래시(/
)로 감싼 형태로 정규 표현식을 작성하는 방법입니다.
const regex = /pattern/;
1.1.2. 생성자 함수
RegExp()
생성자 함수를 사용해 정규 표현식을 만들 수 있습니다.
const regex = new RegExp("pattern");
2. 정규 표현식의 플래그
정규 표현식에는 검색의 범위와 방식을 제어하는 플래그가 있습니다.
플래그 | 설명 |
---|---|
g |
전체 문자열에서 모든 일치 항목을 찾습니다. |
i |
대소문자를 구분하지 않고 검색합니다. |
m |
여러 줄에 걸쳐 검색을 수행합니다. |
u |
유니코드 모드에서 작동합니다. |
s |
줄바꿈 문자도 일치시킬 수 있습니다. (. 포함) |
2.1. 예시: 플래그 사용
const regex = /hello/i; // 대소문자를 구분하지 않고 "hello" 검색
const text = "Hello World!";
console.log(regex.test(text)); // 출력: true
3. 정규 표현식 패턴
정규 표현식에서 다양한 문자 클래스와 특수 기호를 사용하여 검색 패턴을 정의할 수 있습니다.
3.1. 기본 패턴
패턴 | 설명 |
---|---|
. |
임의의 한 문자 (줄바꿈 제외) |
\\\\d |
숫자(digit)와 일치 |
\\\\D |
숫자가 아닌 문자와 일치 |
\\\\w |
알파벳 문자, 숫자, 밑줄과 일치 |
\\\\W |
알파벳 문자, 숫자, 밑줄이 아닌 문자와 일치 |
\\\\s |
공백 문자와 일치 |
\\\\S |
공백이 아닌 문자와 일치 |
^ |
문자열의 시작을 나타냄 |
$ |
문자열의 끝을 나타냄 |
* |
0회 이상 반복 |
+ |
1회 이상 반복 |
? |
0회 또는 1회 등장 |
{n} |
정확히 n번 반복 |
{n,} |
n회 이상 반복 |
{n,m} |
n회 이상 m회 이하 반복 |
3.2. 문자 그룹
문자 그룹을 사용해 여러 문자 중 하나를 매칭할 수 있습니다.
[abc]
: a, b, c 중 하나와 일치[a-z]
: a부터 z까지의 소문자와 일치[^abc]
: a, b, c를 제외한 모든 문자와 일치
3.3. 예시: 패턴 사용
const regex = /\\\\d{3}-\\\\d{3}-\\\\d{4}/; // "123-456-7890"과 같은 패턴
const phone = "My number is 123-456-7890.";
console.log(regex.test(phone)); // 출력: true
4. 정규 표현식 메서드
JavaScript에서는 정규 표현식과 관련된 여러 메서드를 제공합니다. 주로 test()
,
match()
, replace()
,
search()
, split()
메서드가 사용됩니다.
4.1. test()
: 일치 여부 확인
test()
메서드는 문자열이 정규 표현식과 일치하는지 확인하고, 불리언 값을 반환합니다.
const regex = /world/;
const text = "Hello world!";
console.log(regex.test(text)); // 출력: true
4.2. match()
: 일치하는 항목 반환
match()
메서드는 정규 표현식과 일치하는 모든 항목을 배열로 반환합니다. 플래그로 **g
**를
사용하면 모든 일치 항목을 찾습니다.
const regex = /\\\\d+/g;
const text = "There are 100 apples and 200 oranges.";
const matches = text.match(regex);
console.log(matches); // 출력: [ '100', '200' ]
4.3. replace()
: 문자열 대체
replace()
메서드는 정규 표현식과 일치하는 문자열을 다른 문자열로 대체합니다.
const regex = /apple/gi;
const text = "Apple and apple";
const result = text.replace(regex, "orange");
console.log(result); // 출력: "orange and orange"
4.4. search()
: 일치하는 위치 찾기
search()
메서드는 정규 표현식과 일치하는 첫 번째 위치의 인덱스를 반환합니다.
const regex = /banana/;
const text = "I like banana and apple.";
const index = text.search(regex);
console.log(index); // 출력: 7
4.5. split()
: 패턴 기준으로 문자열 나누기
split()
메서드는 문자열을 정규 표현식을 기준으로 나누어 배열로 반환합니다.
const regex = /\\\\s+/; // 공백을 기준으로 나누기
const text = "Split this sentence into words.";
const words = text.split(regex);
console.log(words); // 출력: ['Split', 'this', 'sentence', 'into', 'words.']
5. 고급 정규 표현식 기능
5.1. 캡처 그룹
괄호 ()
를 사용하여 캡처 그룹을 만들고, 일치하는 값을 그룹화할 수 있습니다.
const regex = /(\\\\d{3})-(\\\\d{3})-(\\\\d{4})/;
const phone = "123-456-7890";
const matches = phone.match(regex);
console.log(matches[1]); // 출력: 123
console.log(matches[2]); // 출력: 456
console.log(matches[3]); // 출력: 7890
5.2. 선택 패턴 (|
)
|
연산자를 사용하여 여러 패턴 중 하나와 일치할 수 있습니다.
const regex = /apple|banana/;
const text = "I like banana.";
console.log(regex.test(text)); // 출력: true
5.3. 역참조 (\\\\1
, \\\\2
등)
역참조를 사용하여 캡처된 그룹을 다시 참조할 수 있습니다.
const regex = /(\\\\d{3})-(\\\\d{3})-\\\\1/;
const phone = "123-456-123";
console.log(regex.test(phone)); // 출력: true
6. 유효성 검사 예시
정규 표현식을 사용하여 이메일 주소나 전화번호 같은 입력 값을 유효성 검사를 할 수 있습니다.
6.1. 이메일 유효성 검사
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,}$/;
const email = "user@example.com";
console.log(emailRegex.test(email)); // 출력: true
6.2. 전화번호 유효성 검사
const phone
Regex = /^\\\\d{3}-\\\\d{3}-\\\\d{4}$/;
const phone = "123-456-7890";
console.log(phoneRegex.test(phone)); // 출력: true
요약
- 정규 표현식은 문자열에서 특정 패턴을 검색하거나 일치하는 부분을 처리하는 강력한 도구입니다.
- 플래그:
g
(전체 검색),i
(대소문자 무시),m
(여러 줄 검색) 등 - 메서드:
test()
(일치 여부 확인),match()
(일치 항목 반환),replace()
(문자열 대체),search()
(위치 검색),split()
(문자열 분할) - 패턴: 숫자(
\\\\d
), 알파벳(\\\\w
), 공백(\\\\s
), 반복(``,+
,?
) 등 - 유효성 검사: 정규 표현식을 사용해 이메일이나 전화번호의 형식을 검증할 수 있습니다.
JavaScript에서 정규 표현식은 문자열 처리의 중요한 도구로, 데이터를 검증하거나 조작할 때 유용하게 사용할 수 있습니다.