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

JavaScript로 숫자 문자열의 선행 0을 공백으로 바꾸는 방법


문제 개요

숫자를 나타내는 문자열을 입력받아, 맨 앞에 위치한 0(선행 0)을 공백으로 바꾸는 JavaScript 함수를 작성해야 합니다. 이때 숫자 앞에 이미 존재하는 공백은 그대로 유지해야 한다는 점이 중요합니다.

예를 들어, 문자열 값이 다음과 같이 정의되어 있다면 −

"    004590808"

출력 결과는 다음과 같아야 합니다 −

" 4590808"

예제 코드

다음은 위 문제를 해결하는 전체 코드입니다 −

const str = ' 004590808';

const replaceWithSpace = str => {
  let replaced = '';
  const regex = new RegExp(/^\s*0+/);
  replaced = str.replace(regex, el => {
    const { length } = el;
    return ' '.repeat(length);
  });
  return replaced;
};

console.log(replaceWithSpace(str));

실행 결과

이 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다 −

4590808

콘솔 출력에서는 선행 공백이 눈에 잘 띄지 않지만, 실제 반환된 문자열에는 매칭된 부분(기존 공백 + 선행 0)과 동일한 길이의 공백이 포함되므로 전체 문자열의 길이는 변하지 않습니다.

코드 동작 원리

  • 정규 표현식 /^\s*0+/ : 문자열 시작(^)부터 이어지는 공백(\s*)과 하나 이상의 연속된 0(0+)을 찾아냅니다.
  • replace() 콜백 함수 : 매칭된 문자열(el)의 길이를 구한 뒤, 같은 길이만큼의 공백(' '.repeat(length))을 반환합니다.
  • 이 덕분에 원래 있던 공백은 그대로 유지되고, 0 자리만 정확히 공백으로 대체됩니다.

더 간단한 대안

위 로직은 replace()에 정규식과 화살표 함수를 직접 전달하여 한 줄로도 처리할 수 있습니다.

const replaceWithSpace = str => str.replace(/^\s*0+/, m => ' '.repeat(m.length));

console.log(replaceWithSpace(' 004590808'));

두 방식 모두 결과는 동일하며, 상황에 따라 가독성이 좋은 쪽을 선택해 사용하면 됩니다.