JavaScriptで数値のみ抽出する
JavaScriptで文字列から非数値文字を削除する
JavaScriptでは、文字列からすべての非数値文字を削除するために、正規表現とreplace()
メソッドを使用することができます。
正規表現の解説
g
: 全てのマッチする箇所を置き換えます。\D
: 任意の非数値文字とマッチします。
コード例
let str = "123abc456def789";
let result = str.replace(/\D/g, '');
console.log(result); // 出力: 123456789
処理の流れ
- 正規表現の作成:
/\D/g
は、すべての非数値文字にマッチする正規表現です。 replace()
メソッドの使用:str.replace(/\D/g, '')
は、str
内の非数値文字を空文字に置き換えます。- 結果の出力:
console.log(result)
で、非数値文字が削除された文字列を出力します。
- カスタム正規表現: 必要な場合、正規表現をカスタマイズして特定の文字を削除することもできます。
- 数値以外の文字: 数字以外の文字(アルファベット、記号、空白など)が非数値文字です。
コード例1: 正規表現を用いた方法
let str = "123abc456def789";
let result = str.replace(/\D/g, '');
console.log(result); // 出力: 123456789
replace()
メソッド: 文字列内の特定の文字やパターンを、別の文字列に置き換えるメソッドです。この例では、/\D/g
にマッチする全ての非数値文字を、空文字に置き換えています。g
: 全てのマッチする箇所を置き換えます。文字列中に複数の非数値文字がある場合、全てを空文字に置き換えます。\D
: 任意の非数値文字とマッチします。数字以外の文字(アルファベット、記号、空白など)を全て網羅します。
コード例2: 文字コードを利用した方法 (より高度なケース向け)
let str = "123abc456def789";
let result = "";
for (let i = 0; i < str.length; i++) {
let char = str.charCodeAt(i);
if (char >= 48 && char <= 57) { // 0から9のASCIIコード範囲
result += str[i];
}
}
console.log(result); // 出力: 123456789
for
ループ: 文字列の各文字を順番に調べ、数値の範囲内にある場合のみ結果の文字列に追加します。- ASCIIコード: 文字を数値で表現する方式の一つで、0から9の数字はそれぞれ48から57に対応しています。
charCodeAt()
メソッド: 文字のUnicodeコードポイントを数値で返します。
この方法のメリット
- 特定の文字コード範囲の文字だけを抽出したい場合に有効。
- 正規表現を使わないため、よりシンプルに記述できる場合がある。
コード例3: Array.prototype.filter()を利用した方法 (ES6以降)
let str = "123abc456def789";
let result = str.split('').filter(char => !isNaN(char)).join('');
console.log(result); // 出力: 123456789
join('')
: 配列の要素を指定された文字列で連結し、新しい文字列を作成します。isNaN()
: 引数がNaN(Not a Number)かどうかを判定します。数値に変換できない場合はtrueを返します。filter()
: 配列の要素を順番に処理し、条件を満たす要素のみを含む新しい配列を返します。split('')
: 文字列を1文字ずつに分割して配列に変換します。
- ES6以降の機能である
filter()
を使えるため、よりモダンな書き方となる。 - 配列の操作に慣れている場合、直感的に理解しやすい。
どの方法を選ぶべきか?
- モダンさ
filter()
を使った方法は、ES6以降の機能を活用したい場合に適しています。 - 柔軟性
文字コードを利用した方法は、より細かい制御が可能です。 - 簡潔さ
正規表現を使った方法が最もシンプルです。
- より複雑な処理
例えば、小数点を含む数値を抽出したい場合は、正規表現を調整する必要があります。 - 数値のみ抽出するという表現は、上記の方法で実現できます。
関数を利用した方法
function extractNumbers(str) {
return str.split('').filter(char => /\d/.test(char)).join('');
}
let str = "123abc456def789";
let result = extractNumbers(str);
console.log(result); // 出力: 123456789
- 可読性
関数名に処理内容が分かりやすく記述されているため、コードの可読性向上に繋がります。 - 再利用性
この関数を他の部分でも再利用できます。 - カスタム関数
extractNumbers
関数を定義し、数値抽出の処理をカプセル化します。
ライブラリを利用する方法
- Underscore.js
Lodashと同様に、JavaScriptのユーティリティライブラリです。 - Lodash
JavaScriptのユーティリティライブラリであるLodashには、文字列操作に関する様々な便利な関数が用意されています。
// Lodashの例
const _ = require('lodash');
let str = "123abc456def789";
let result = _.filter(str, _.isNumber);
console.log(result.join('')); // 出力: 123456789
- パフォーマンス
ライブラリによっては、パフォーマンスが最適化されている場合があります。 - 簡潔な記述
ライブラリの関数を使うことで、少ないコードで複雑な処理を実現できます。
正規表現の活用(より詳細なパターンマッチング)
let str = "123.456abc789";
let result = str.match(/\d+(\.\d+)?/g).join('');
console.log(result); // 出力: 123.456789
- 柔軟性
正規表現をカスタマイズすることで、様々なパターンに合わせた抽出が可能になります。 - 小数点を含む数値
\d+(\.\d+)?
という正規表現で、整数と小数点を両方含む数値を抽出できます。
TypeScriptの型システムを利用する方法
function extractNumbers(str: string): string {
return str.replace(/\D/g, '');
}
- 大規模開発
大規模なプロジェクトにおいて、コードの信頼性を高めることができます。 - 型安全
TypeScriptの型システムを利用することで、変数の型を明示的に指定し、実行時のエラーを防ぐことができます。
- 型安全
TypeScriptを利用することで、コードの信頼性を高めることができます。 - 再利用性
カスタム関数やライブラリを利用する方法が再利用性が高いです。
状況に応じて最適な方法を選択してください。
JavaScriptで数値のみを抽出する方法として、様々なアプローチが存在します。それぞれの方法に特徴があるため、プロジェクトの規模、コードの可読性、パフォーマンス、柔軟性などを考慮して、最適な方法を選択することが重要です。
javascript string