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

JavaScript 문자열에서 숫자만 추출하는 방법

문제 개요

알파벳, 특수 문자, 숫자가 뒤섞여 있는 하나의 문자열이 주어졌을 때, 이 문자열에서 숫자만 골라내는 JavaScript 함수를 작성해야 합니다.

함수는 원본 문자열에 있는 숫자들만 모아 새로운 문자열로 반환하며, 이때 숫자들이 원래 문자열에서 등장한 순서(상대적 순서)는 그대로 유지되어야 합니다.

예를 들어 입력 문자열이 다음과 같다면,

const str = 'revd1fdfdfs2v34fd5gfgfd6gffg7ds';

출력 결과는 아래와 같아야 합니다.

const output = '1234567';

해결 방법 1: 반복문 사용

가장 직관적인 방법은 문자열을 한 글자씩 순회하면서 해당 문자가 숫자인지 검사하는 것입니다. 각 문자를 숫자로 변환했을 때 유효한 값이라면 결과 문자열에 이어 붙입니다.

주의할 점은 단순히 +el의 참/거짓 여부만으로 판단하면 숫자 '0'이 거짓(falsy) 값으로 평가되어 누락될 수 있다는 것입니다. 따라서 isNaN()을 함께 사용하는 것이 안전합니다.

코드

const str = 'revd1fdfdfs2v34fd5gfgfd6gffg7ds';

const pickNumbers = (str = '') => {
    let res = '';
    for (let i = 0; i < str.length; i++) {
        const el = str[i];
        // 숫자 여부 판별 ('0'도 정확히 처리)
        if (!isNaN(+el)) {
            res += el;
        }
    };
    return res;
};

console.log(pickNumbers(str));

출력 결과

1234567

해결 방법 2: 정규식 사용

같은 작업은 정규식을 활용하면 한 줄로 더 간결하게 처리할 수 있습니다. 숫자가 아닌 모든 문자([^0-9])를 빈 문자열로 치환하면 됩니다.

const pickNumbers = (str = '') => str.replace(/[^0-9]/g, '');

console.log(pickNumbers('revd1fdfdfs2v34fd5gfgfd6gffg7ds')); // '1234567'

또는 match() 메서드로 숫자만 배열로 추출한 뒤 합치는 방법도 있습니다.

const pickNumbers = (str = '') => (str.match(/\d/g) || []).join('');

정리

반복문 방식은 로직을 명확하게 보여준다는 장점이 있고, 정규식 방식은 코드가 짧고 가독성이 좋다는 장점이 있습니다. 성능 면에서는 일반적으로 정규식 치환이 내부적으로 최적화되어 있어 큰 문자열에서도 효율적이므로, 실무에서는 정규식 방식을 권장합니다.