취업 준비하면서 공부할 겸 프로그래머스에서 코딩 테스트를 풀고 있다.
문제를 풀면 다른 사람 풀이를 볼 수 있는데, 정말 간단한 식으로 푸는 고수들이 존재했다.
그 중에 제대로 배운 적 없는 정규표현식을 사용해서 깔끔하게 코드를 쓰는 걸 보고 정리해보기로 했다.
자바스크립트 정규표현식(RegExp)은 아래와 같은 상황에서 사용하면 유용하다.
- 문자열에서 특정 패턴 검색
- 특정 문자열 대체 or 추출
정규표현식 생성
정규표현식은 리터럴(literal)과 생성자(constructor) 두 가지 방법으로 생성할 수 있다.
리터럴
리터럴 방법은 슬래시(/)로 감싸서 생성한다.
const pattern = /apple/;
RegExp 객체 생성
생성자에는 두 개의 매개변수를 전달할 수 있다.
첫 번째 매개변수는 정규표현식의 패턴을 나타내는 문자열
두 번째 매개변수는 검색 옵션을 지정하는 문자열이고 검색 옵션은 다음과 같은 것이 있다.
- "g" : 전역 검색(global search)
- "i" : 대소문자를 구분하지 않는 검색(case-insensitive search)
- "m" : 여러 줄 검색(multi-line search)
const pattern = new RegExp("apple", "gi");
const str = "I want to eat an apple. I want to eat an APPLE.";
const result1 = str.search(pattern); // 처음 일치하는 "apple"의 인덱스인 18을 반환한다.
const result2 = str.match(pattern); // ["apple", "APPLE"]과 일치하는 문자열을 배열로 반환한다.
const result3 = str.replace(pattern, "banana"); // "apple"과 "APPLE"을 모두 "banana"로 대체한다.
const result4 = str.split(pattern); // "apple"과 "APPLE"을 기준으로 문자열을 나눈다.
문자 클래스
문자 클래스는 대괄호([])로 감싸서 표현한다. 문자열 내에서 특정 문자를 찾을 때 사용한다.
예시:
- /[abc]/ : a, b, c 중 하나와 일치하는 문자열
- /[a-z]/ : 알파벳 소문자 중 하나와 일치하는 문자열
- /[A-Z]/ : 알파벳 대문자 중 하나와 일치하는 문자열
- /[0-9]/ : 숫자 중 하나와 일치하는 문자열
특수 문자
정규표현식에서는 특수한 의미를 갖는 문자들이 있다.
- . : 줄바꿈 문자를 제외한 모든 문자와 일치한다.
- ^ : 문자열의 처음과 일치한다.
- $ : 문자열의 끝과 일치한다.
- \* : 0개 이상의 문자와 일치한다.
- \+ : 1개 이상의 문자와 일치한다.
- ? : 0개 또는 1개의 문자와 일치한다.
- {n} : n개의 문자와 일치한다.
- {n, m} : n개 이상, m개 이하의 문자와 일치한다.
- () : 그룹을 지정한다.
const pattern = /[aeiou]/; // a, e, i, o, u 중 하나와 일치하는 문자열을 찾는다.
const str = "hello world";
const result1 = str.search(pattern); // 결과: 1
const result2 = str.match(pattern); // 결과: ["e"]
const result3 = str.replace(pattern, "x"); // 결과: "hxllo world"
const result4 = str.split(pattern); // 결과: ["h", "llo world"]
정규표현식 메소드
자바스크립트에서는 String 객체의 메소드를 이용해서 정규표현식을 적용할 수 있다.
- search() : 일치하는 문자열의 인덱스를 반환한다.
- match() : 일치하는 문자열을 배열로 반환한다.
- replace() : 일치하는 문자열을 대체한다.
- split() : 일치하는 문자열을 기준으로 문자열을 나눈다.
const pattern = /apple/;
const str = "I want to eat an apple.";
const result1 = str.search(pattern); // "apple"의 인덱스인 18을 반환한다.
const result2 = str.match(pattern); // ["apple"]과 일치하는 문자열을 배열로 반환한다.
const result3 = str.replace(pattern, "banana"); // "apple"을 "banana"로 대체한다.
const result4 = str.split(pattern); // "apple"을 기준으로 문자열을 나눈다.
'코딩 일기' 카테고리의 다른 글
[프로그래머스] 코딩 테스트 중 얻게 된 Tip 정리. (0) | 2023.04.07 |
---|---|
[TeamProject] 야놀자 홈페이지 팀프로젝트 작업 일기 (0) | 2022.12.27 |
[Only html / css] 팝업창 띄우기 (0) | 2022.11.05 |