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

【JavaScript】文字列に埋め込まれた数値をすべて抽出する関数の作り方

JavaScriptには、文字列を数値に変換するparseInt()parseFloat()といった標準関数が用意されています。しかし、これらのメソッドには弱点があります。数値が文字列の途中に埋め込まれている場合、先頭の連続した数字しか取得できません。

例えば、次のコードは「454」しか返しません。本来であれば「4545453」を取得したいところです。

parseInt('454ffdg54hg53')

そこで本記事では、数字と文字が混在する文字列を受け取り、含まれるすべての数字を順に結合した数値を返すJavaScript関数を作成します。

実装例

以下がそのコードです。

const numStr = '454ffdg54hg53';
const parseInteger = numStr => {
    let res = 0;
    for(let i = 0; i < numStr.length; i++){
        if(!+numStr[i]){
            continue;
        };
        res = (res * 10) + (+numStr[i]);
    };
    return res;
};
console.log(parseInteger(numStr));

この関数の仕組みは次のとおりです。

  • 文字列を1文字ずつ走査し、単項プラス演算子(+)で各文字を数値に変換します。
  • 変換結果が0(数字以外の文字)であればcontinueでスキップします。
  • 数字であれば「res * 10 + 現在の数字」とすることで、桁をずらしながら結果を蓄積していきます。

なお、この実装では数字の「0」もスキップされる点に注意してください。0を正しく扱いたい場合は、isNaN(+numStr[i])で判定するように変更するとよいでしょう。

出力結果

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

4545453

補足:正規表現を使ったより簡潔な方法

実務では、正規表現を使うとより簡潔に記述できます。数字以外の文字(\D)をすべて取り除くだけで、同じ結果が得られます。

const numStr = '454ffdg54hg53';
const result = +numStr.replace(/\D/g, '');
console.log(result); // 4545453

状況に応じてループ処理と正規表現を使い分けることで、可読性と保守性の高いコードを実現できます。

  1. JavaScriptのNumber()関数とは?使い方とサンプルコードを解説

    JavaScriptのNumber()関数は、引数として渡された値やオブジェクトを、それに対応する数値へ変換するための関数です。真偽値や文字列型の数字、さらにはDateオブジェクトなども数値に変換できるため、データ型の変換処理において非常に便利な組み込み関数の一つです。例えば、Number(true)は「1」、Number(false)は「0」を返します。また、数字のみで構成された文字列「149」を渡せば数値の149に変換され、new Date()で生成した日付オブジェクトを渡すと、1970年1月1日からの経過ミリ秒数が返されます。以下に、Number()関数の動作を確認できるサンプルコードを

  2. JavaScriptで指定した数値で割り切れる乱数を生成する方法

    JavaScriptでは、引数として受け取った数値で必ず割り切れる乱数を生成したい場面があります。例えば、グリッド配置や一定間隔の値が必要な処理などが挙げられます。本記事では、数値を1つだけ引数として受け取り、その数値で割り切れるランダムな整数を返す関数の実装方法を解説します。実装コード以下のコードでは、デフォルトの上限値を1000000とし、引数で指定した数値(num)の倍数となる乱数を生成しています。 { // ランダムな数値を取得 const random = Math.random() * limit; // num で割り切れるように四捨五入 cons