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

자바스크립트로 문자열에서 숫자만 추출하는 방법

문제 개요

문자열 안에 여러 개의 숫자가 섞여 있을 때, 이 숫자들을 모두 추출하여 하나의 숫자로 만들어주는 자바스크립트 함수를 작성해 보겠습니다.

예를 들어 'sfsd8fsdf6dsfsd8sdfs28fd0' 같은 문자열이 입력되면, 함수는 문자열에 포함된 모든 숫자를 순서대로 이어 붙여 86828이라는 결과를 반환해야 합니다.

참고: 만약 문자열에 숫자가 전혀 포함되어 있지 않다면 함수는 0을 반환해야 합니다.

예제 코드

const str = 'sfsd8fsdf6dsfsd8sdfs28fd0';

const pickNumbers = (str = '') => {
   let res = 0;
   for(let i = 0; i < str.length; i++){
      const el = str[i];
      if(+el){
         res = (res * 10) + +el;
      };
   };
   return res;
};

console.log(pickNumbers(str));
console.log(pickNumbers('this string contains no numbers'));

코드 동작 원리

이 코드의 핵심 로직은 다음과 같습니다.

  • 단항 연산자(+): 각 문자를 숫자로 변환합니다. 숫자가 아닌 문자는 NaN이 되어 if 조건에서 거짓으로 평가되므로 자연스럽게 걸러집니다.
  • res * 10 + +el: 기존 결과값에 10을 곱해 자릿수를 한 칸 밀어낸 뒤 새로운 숫자를 더하는 방식으로, 발견된 숫자를 차례대로 이어 붙입니다.
  • 기본값 처리: 결과 변수의 초기값이 0이므로, 숫자가 하나도 발견되지 않으면 그대로 0이 반환됩니다.

실행 결과

위 코드를 실행하면 콘솔에 다음과 같이 출력됩니다.

86828
0

정규식을 활용한 더 간결한 방법

같은 작업은 정규식을 사용하면 훨씬 짧은 코드로 처리할 수 있습니다.

const pickNumbers = (str = '') => {
   const matched = str.match(/\d/g);
   return matched ? +matched.join('') : 0;
};

이 방식은 문자열에서 모든 숫자 문자를 배열로 추출한 뒤 이어 붙여 숫자로 변환하고, 매칭 결과가 없으면 0을 반환합니다. 다만 추출되는 숫자가 매우 길면 Number 타입의 안전한 정수 범위를 초과할 수 있으므로, 필요에 따라 문자열 형태로 유지하거나 BigInt를 사용하는 것도 고려해 보세요.