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

JavaScript로 문자열에서 배열에 포함된 단어 제거하기

문제 상황

하나의 문자열과 문자열 배열이 주어졌을 때, 배열에 포함된 모든 단어를 원본 문자열에서 제거하는 함수를 작성해야 합니다.

여기서 제거 대상은 완전한 단어이므로, 단어를 삭제한 후 남는 앞뒤 공백도 함께 정리하여 두 개 이상의 공백이 연속으로 나타나지 않도록 처리해야 합니다.

그럼 이 기능을 구현하는 코드를 작성해 보겠습니다.

구현 예시

const string = "The weather in Delhi today is very similar to the weather in Mumbai";
const words = [
    'shimla','rain','weather','Mumbai','Pune','Delhi','tomorrow','today','yesterday'
];
const removeWords = (str, arr) => {
    return arr.reduce((acc, val) => {
        const regex = new RegExp(` ${val}`, "g");
        return acc.replace(regex, '');
    }, str);
};
console.log(removeWords(string, words));

코드 설명

위 코드의 핵심은 reduce() 메서드와 정규표현식의 조합입니다.

  • reduce(): 배열의 각 요소(제거할 단어)를 순회하면서 누적 결과값(acc)에 해당 단어 제거 작업을 반복 적용합니다. 초기값은 원본 문자열입니다.
  • 정규표현식: 각 단어 앞에 공백(` `)을 붙여 패턴을 만듭니다. 이렇게 하면 'weather'라는 단어가 'sunny weather'처럼 독립된 단어일 때만 제거되고, 다른 단어의 일부로 포함된 경우에는 제거되지 않아 안전합니다.
  • replace(regex, ''): 일치하는 부분을 빈 문자열로 교체하여 단어와 그 앞의 공백을 한 번에 제거합니다.

이 방식은 단어 앞의 공백까지 함께 제거하기 때문에, 여러 단어를 삭제한 뒤에도 불필요한 연속 공백이 생기지 않습니다.

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

The in is very similar to the in

'weather', 'Delhi', 'today', 'Mumbai' 등 배열에 포함된 단어들이 모두 제거되고, 남은 단어들이 자연스럽게 정리된 것을 확인할 수 있습니다.

마무리

이 접근 방식은 코드가 간결할 뿐만 아니라, reduce와 정규표현식을 활용해 가독성도 뛰어납니다. 다만 대량의 데이터를 처리할 경우 각 단어마다 정규표현식 객체를 새로 생성하는 비용이 발생할 수 있으니, 성능이 중요한 환경에서는 패턴을 미리 조합한 하나의 정규표현식으로 최적화하는 방법도 고려해 볼 수 있습니다.