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

JavaScript에서 반복 문자 앞에 개수를 붙여 문자열 크기를 줄이는 방법

다음과 같이 같은 문자가 연속해서 반복되는 원본 문자열이 있다고 가정해 보겠습니다.

var values = "DDAAVIDMMMILLERRRRR";

우리의 목표는 반복되는 문자를 제거하고, 각 문자 앞에 해당 문자가 반복된 횟수를 붙여 문자열을 압축하는 것입니다. 이를 위해 replace() 메서드와 정규표현식(Regular Expression)을 함께 사용하면 간단하게 해결할 수 있습니다.

예제 코드

다음은 전체 코드입니다.

var values = "DDAAVIDMMMILLERRRRR";
var precedingNumbersInString = values.replace(/(.)\1+/g, obj => obj.length + obj[0]);
console.log("원본 문자열 값=" + values);
console.log("숫자를 앞에 붙인 후의 문자열 값=");
console.log(precedingNumbersInString);

위 프로그램을 실행하려면 다음 명령어를 사용합니다.

node fileName.js

여기서는 파일 이름이 demo295.js라고 가정하겠습니다.

코드 설명

핵심은 정규표현식 /(.)\1+/g입니다. 이 패턴은 임의의 한 문자(.)를 캡처 그룹으로 저장한 뒤, 바로 뒤에 같은 문자가 하나 이상(\1+) 이어지는 구간, 즉 연속으로 반복되는 문자열 전체를 찾아냅니다. 마지막의 g 플래그 덕분에 문자열 전체에서 일치하는 모든 구간이 처리됩니다.

일치하는 부분이 발견될 때마다 콜백 함수 obj => obj.length + obj[0]가 실행됩니다. 여기서 obj는 매칭된 문자열 전체를 의미하므로, obj.length는 반복 횟수, obj[0]은 반복된 문자 자체를 나타냅니다. 예를 들어 "DD"는 길이 2와 첫 번째 문자 D를 결합해 "2D"로 변환됩니다.

실행 결과

콘솔에는 다음과 같은 출력 결과가 나타납니다.

PS C:\Users\Amit\javascript-code> node demo295.js
원본 문자열 값=DDAAVIDMMMILLERRRRR
숫자를 앞에 붙인 후의 문자열 값=
2D2AVID3MI2LE5R

결과를 보면 "DD"는 "2D", "AAA"는 "3A", "RRRRR"는 "5R"처럼 변환되어, 반복 문자가 개수와 문자의 조합으로 압축된 것을 확인할 수 있습니다. 이 방식은 런렝스 인코딩(Run-Length Encoding)의 기본 원리와 같으며, 반복 데이터가 많은 문자열을 효율적으로 줄이는 데 유용합니다.