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

JavaScript로 문자열에서 특정 문자 바로 뒤에 오는 문자 추출하기

문제 정의

문자열 str과 하나의 문자 char를 입력으로 받는 JavaScript 함수를 작성해야 합니다. 함수는 원본 문자열에서 지정한 문자가 등장하는 각 위치의 바로 다음 문자를 찾아, 이들을 하나로 이어 붙인 새로운 문자열을 반환합니다. 만약 해당 문자가 문자열의 마지막에 위치해 다음 문자가 없다면, 그 위치는 자연스럽게 건너뛰게 됩니다.

예를 들어 문자열 'this is a string'에서 문자 'i'를 찾으면, 각 'i' 바로 뒤에 오는 문자들은 's', 's', 'n'이므로 최종 결과는 'ssn'이 되어야 합니다.

구현 예제

다음은 기본적인 for 반복문을 활용한 구현 코드입니다.

const str = 'this is a string';
const letter = 'i';
const findNextString = (str = '', letter = '') => {
    let res = '';
    for(let i = 0; i < str.length; i++){
        const el = str[i];
        const next = str[i + 1];
        if(letter === el && next){
            res += next;
        };
    };
    return res;
};
console.log(findNextString(str, letter));

코드 동작 방식

코드의 흐름을 단계별로 살펴보면 다음과 같습니다.

  • 결과를 담을 빈 문자열 res를 먼저 선언합니다.
  • for 반복문으로 문자열의 처음부터 끝까지 한 글자씩 순회합니다.
  • 현재 문자 el이 찾고자 하는 letter와 일치하는지 확인합니다.
  • 일치할 경우, 그 다음 위치의 문자 next가 실제로 존재하는지 검사한 뒤 존재한다면 res에 추가합니다. 이 조건 덕분에 문자열 맨 끝의 문자 뒤를 참조해 발생하는 undefined 문제를 방지할 수 있습니다.
  • 모든 순회가 끝나면 완성된 문자열 res를 반환합니다.

출력 결과

ssn

입력 문자열 'this is a string'에는 'i'가 세 번 등장하며, 각각의 바로 다음 문자가 순서대로 's', 's', 'n'이므로 최종적으로 'ssn'이 출력됩니다.

대안: 정규표현식으로 더 간결하게

같은 로직은 정규표현식을 사용하면 훨씬 짧은 코드로 구현할 수 있습니다.

const findNextString = (str = '', letter = '') => {
    const escaped = letter.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // 특수문자 처리
    const regex = new RegExp(escaped + '(.)', 'g');
    return [...str.matchAll(regex)].map(match => match[1]).join('');
};
console.log(findNextString('this is a string', 'i')); // ssn

이 방식은 찾고자 하는 문자 뒤에 임의의 한 문자를 캡처하는 패턴을 만들어, 일치하는 모든 결과에서 캡처된 문자만 추출한 후 하나의 문자열로 합칩니다. 다만 검색 대상 문자가 정규표현식 특수문자일 수 있으므로, 안전한 사용을 위해 이스케이프 처리를 추가하는 것이 좋습니다.