heyday2024 님의 블로그
RegEXP 본문
알고리즘 코드 카타를 진행하면서 새롭게 알게된 RegExp에 대해 정리해보았습니다.
function solution(s) {
numberArray = [
"zero",
"one",
"two",
"three",
"four",
"five",
"six",
"seven",
"eight",
"nine"
];
numberArray.forEach((number, index) => {
const regex = new RegExp(number, "g");
s = s.replace(regex, index);
})
return Number(s)
}
console.log(solution("one4seveneight")); //1478
(- 이런 식으로 replace와 쓰면 문자열 패턴을 찾아내어 해당 문자를 내가 원하는 다른 것으로 대체할 수 있음.)
JavaScript의 RegExp 객체는 정규 표현식을 만들고 문자열에서 특정 패턴을 검색하거나 작업을 수행할 때 사용됩니다. 정규 표현식에는 다양한 옵션이 있으며, 각각 특정 동작을 제어합니다.
RegExp 생성자 형식
const regex = new RegExp(pattern, flags);
- pattern: 찾고자 하는 텍스트 패턴(문자열 또는 정규 표현식).
- flags: 검색 동작을 제어하는 옵션 플래그
정규 표현식 플래그(flags)
flags는 검색의 동작을 제어하며, 정규 표현식에 옵션을 추가합니다.
<자주 사용하는 플래그 표로 정리!!>
g | Global | 패턴과 일치하는 모든 항목을 검색. 첫 번째 항목만 검색하려면 생략. |
i | Ignore Case | 대소문자를 구분하지 않고 검색. |
m | Multiline | 여러 줄에 걸쳐 패턴 검색. 문자열의 각 줄을 시작(^)과 끝($)으로 간주. |
s | Dotall | .이 줄바꿈 문자(\n)도 포함하도록 설정. |
u | Unicode | 유니코드 문자 처리 활성화. 유니코드 문자 처리나 \u{} 표기법을 사용할 때 필요. |
y | Sticky | 문자열의 현재 위치부터 패턴 검색. 일치하지 않으면 검색 실패. |
플래그 예시
1. g (Global)
모든 일치 항목을 검색:
const regex = /cat/g;
const str = "cat and another cat";
console.log(str.match(regex)); // ["cat", "cat"]
2. i (Ignore Case)
대소문자를 구분하지 않고 검색:
const regex = /cat/i;
const str = "Cat and another cat";
console.log(str.match(regex)); // ["Cat"]
3. m (Multiline)
여러 줄에서 각 줄의 시작과 끝을 확인:
const regex = /^cat/m;
const str = "cat on line 1\ncat on line 2";
console.log(str.match(regex)); // ["cat", "cat"]
4. s (Dotall)
.이 줄바꿈 문자도 포함하도록 설정:
const regex = /cat.*dog/s;
const str = "cat\nis\ndog";
console.log(str.match(regex)); // ["cat\nis\ndog"]
5. u (Unicode)
유니코드 문자를 정확히 처리:
const regex = /\u{1F600}/u; // 😀 (Unicode: U+1F600)
const str = "Hello 😀";
console.log(str.match(regex)); // ["😀"]
6. y (Sticky)
문자열의 현재 위치부터 일치 항목 검색:
const regex = /cat/y;
const str = "cat and another cat";
console.log(regex.exec(str)); // ["cat"]
regex.lastIndex = 5;
console.log(regex.exec(str)); // null (현재 위치에서 일치하지 않음)
정규식 메서드에서 플래그 활용
1. test
주어진 문자열에 패턴이 존재하는지 확인:
const regex = /hello/i;
console.log(regex.test("Hello world!")); // true
2. match
일치하는 모든 항목 반환:
const regex = /dog/g;
console.log("dog and another dog".match(regex)); // ["dog", "dog"]
3. replace
패턴과 일치하는 텍스트를 대체:
const regex = /cat/gi;
console.log("Cat and another cat".replace(regex, "dog")); // "dog and another dog"
플래그 조합 사용
플래그를 조합하여 사용 가능:
const regex = /cat/gi; // 대소문자 무시하고 전역 검색
const str = "Cat and another cat";
console.log(str.match(regex)); // ["Cat", "cat"]
정규 표현식과 함께 사용하는 메서드
- exec: 일치하는 항목 정보를 객체로 반환.
- test: 문자열에 패턴이 포함되어 있는지 확인.
- match: 일치하는 텍스트 반환.
- replace: 패턴과 일치하는 텍스트 대체.
- search: 문자열에서 패턴 검색.
- split: 패턴을 기준으로 문자열 나누기.
정규식 예시
이메일 유효성 검사:
const emailRegex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
console.log(emailRegex.test("test@example.com")); // true
숫자만 포함 확인:
const numberRegex = /^[0-9]+$/;
console.log(numberRegex.test("12345")); // true
console.log(numberRegex.test("123a45")); // false