코딩 일기

[JavaScript]정규표현식 정리

FRDYtheme 2023. 4. 6. 15:07

취업 준비하면서 공부할 겸 프로그래머스에서 코딩 테스트를 풀고 있다.

문제를 풀면 다른 사람 풀이를 볼 수 있는데, 정말 간단한 식으로 푸는 고수들이 존재했다.

그 중에 제대로 배운 적 없는 정규표현식을 사용해서 깔끔하게 코드를 쓰는 걸 보고 정리해보기로 했다.

 

자바스크립트 정규표현식(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"을 기준으로 문자열을 나눈다.