Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript에서 여러 구분자를 기준으로 문자열 분할하는 방법

문제 소개

문자열 하나와 임의 개수의 구분자 문자를 입력받아, 지정된 모든 구분자를 기준으로 문자열을 나눈 배열을 반환하는 JavaScript 함수를 작성해 보겠습니다.

예를 들어 다음과 같은 문자열이 있다고 가정해 보겠습니다.

const str = 'rttt.trt/trfd/trtr,tr';

구분자가 다음과 같다면,

const sep = ['/', '.', ','];

함수는 아래와 같은 결과를 반환해야 합니다.

const output = ['rttt', 'trt', 'trfd', 'trtr', 'tr'];

방법 1. 반복문으로 직접 구현하기

문자열을 한 글자씩 순회하면서 구분자를 만날 때마다 그 앞부분을 잘라 결과 배열에 담는 방식입니다. rest 파라미터(...separators)를 사용하면 구분자를 원하는 만큼 자유롭게 전달할 수 있습니다.

const str = 'rttt.trt/trfd/trtr,tr';

const splitMultiple = (str, ...separators) => {
  const res = [];
  let start = 0;

  for (let i = 0; i < str.length; i++) {
    // 현재 문자가 구분자가 아니면 건너뛴다
    if (!separators.includes(str[i])) continue;

    // 구분자 앞까지의 부분 문자열을 배열에 추가
    res.push(str.substring(start, i));
    start = i + 1;
  }

  // 마지막 구분자 뒤에 남은 문자열도 반드시 추가
  if (start < str.length) {
    res.push(str.substring(start));
  }

  return res;
};

console.log(splitMultiple(str, '/', '.', ','));
// ['rttt', 'trt', 'trfd', 'trtr', 'tr']

핵심 포인트

  • start 변수: 현재 조각이 시작되는 인덱스를 추적합니다.
  • 구분자 발견 시: start부터 구분자 직전까지를 substring()으로 잘라 배열에 넣고, start를 다음 위치로 옮깁니다.
  • 마지막 조각 처리: 루프가 끝난 후 남은 문자열을 추가하지 않으면 문자열 끝의 마지막 조각이 누락되므로 반드시 처리해 주어야 합니다.

방법 2. split()과 정규표현식 활용하기

String.prototype.split()은 정규표현식을 구분자로 받을 수 있습니다. 이를 활용하면 같은 기능을 훨씬 간결하게 구현할 수 있습니다.

const str = 'rttt.trt/trfd/trtr,tr';

const splitMultiple = (str, ...separators) => {
  const pattern = new RegExp(`[${separators.join('')}]`);
  return str.split(pattern);
};

console.log(splitMultiple(str, '/', '.', ','));
// ['rttt', 'trt', 'trfd', 'trtr', 'tr']

구분자에 정규표현식 특수 문자(., *, [ 등)가 포함되면 문자 클래스 안에서 의미가 달라질 수 있으므로, 필요하다면 이스케이프 처리를 해주는 것이 안전합니다. 구분자가 고정되어 있다면 아래처럼 리터럴 정규식을 바로 사용하는 것이 가장 간단합니다.

const result = str.split(/[.,\/]/);
// ['rttt', 'trt', 'trfd', 'trtr', 'tr']

마무리

여러 구분자로 문자열을 나눌 때는 반복문으로 직접 구현하는 방법과 split()에 정규표현식을 조합하는 방법이 모두 유효합니다. 실무에서는 코드가 간결하고 유지보수가 쉬운 정규표현식 방식을 권장하며, 학습 목적이라면 반복문 구현을 통해 문자열 처리 로직을 더 깊이 이해하는 데 도움이 됩니다.