JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

【JavaScript】連続する文字を数字に置き換えて文字列サイズを圧縮する方法

たとえば、同じ文字が繰り返し含まれる次のような元の文字列があるとします。

var values = "DDAAVIDMMMILLERRRRR";

この文字列から重複する文字を取り除き、各文字の前に出現回数(数字)を付けて、より短い文字列へと圧縮することを目指します。

この処理を実現するには、replace() メソッドと正規表現を組み合わせて使用します。正規表現 /(.)\1+/g を使うことで、「同じ文字が1回以上連続している部分」を検出し、その部分を「連続回数+該当文字」の形式に一括で置き換えることができます。

サンプルコード

以下が実際のコードです。

var values = "DDAAVIDMMMILLERRRRR";
var precedingNumbersInString = values.replace(/(.)\1+/g, obj => obj.length + obj[0]);
console.log("元の文字列値=" + values);
console.log("数字を前に付けた後の文字列値=");
console.log(precedingNumbersInString);

コードのポイント解説

  • (.):任意の1文字をキャプチャします。
  • \1+:直前にキャプチャした文字と同じ文字が1回以上連続する部分にマッチします。
  • g フラグ:文字列全体に対して繰り返しマッチングを行います。
  • obj.length + obj[0]:マッチした部分文字列の長さ(連続回数)と、その先頭の1文字を連結した結果を返します。

プログラムの実行方法

上記のプログラムを実行するには、次のコマンドを使用します。

node fileName.js

ここでは、ファイル名を demo295.js としています。

出力結果

コンソールには次のような出力が表示されます。

PS C:\Users\Amit\javascript-code> node demo295.js
元の文字列値=DDAAVIDMMMILLERRRRR
数字を前に付けた後の文字列値=
2D2AVID3MI2LE5R

実行結果を見ると、「DD」→「2D」、「AAA」→「3A」、「MMM」→「3M」、「LL」→「2L」、「RRRRR」→「5R」と変換され、元の18文字の文字列が12文字まで短縮されています。この手法は、連続データを「回数+文字」で表すランレングス圧縮(Run-Length Encoding)と呼ばれる、基本的なデータ圧縮技法の一つです。

  1. JavaScriptで2つの数値を比較する方法【==演算子の使い方を解説】

    JavaScriptで2つの数値を比較するには、等価演算子「==」を使用します。この演算子は、左右の値が等しい場合にtrueを、等しくない場合にfalseを返します。if文と組み合わせることで、比較結果に応じた処理を簡単に実行できます。サンプルコード以下は、変数aとbの値を比較するシンプルな例です。<!DOCTYPE html> <html>    <body>       <script>      &nb

  2. JavaScriptでページを印刷するにはどうすればよいですか?

    JavaScriptでページを印刷するには、print()メソッドを使用します。このメソッドを呼び出すと、ブラウザの標準的な印刷ダイアログボックスが開き、どのプリンターを使用するか、部数はいくつにするかといった印刷オプションを簡単に設定できます。以下は、実際に印刷ダイアログが表示された様子の例です。サンプルコード次のコードを実行すると、ボタンをクリックするだけでページを印刷できる動作を確認できます。<!DOCTYPE html> <html>     <body>     &nb