JavaScript - 文字列から数字のみを抽出する

JavaScriptで正規表現を使用して文字列から数字のみを抽出する方法を紹介します。

1. 文字列からすべての数値を抽出

aaa123bbb456のように文字の間に数字があるとき、文字をすべて削除して残りの数字を1つの数字に続けて 123456を抽出したい場合があります。

このようなときは、以下のように正規表現で文字をすべて削除するだけです。 [^0-9]は数字以外の文字を意味するパターンで、 gは文字列内のすべてのパターンを見つけるという意味です。 replace(regex, "") を実行すると、regex に対応するすべてのパターンを探して "" に変換します。つまり、数字以外の文字はすべて削除されます。このように返された数字は型が String で、 parseInt() で Number 型に変換できます。

const str = "Hello_123_World_456_!!!";
const regex = /[^0-9]/g;
const result = str.replace(regex, "");
const number = parseInt(result);

console.log(result);
console.log(typeof(result));

console.log(number);
console.log(typeof(number));

Output:

123456
string
123456
number

2. 文字列から連続した数字パターンの抽出

aaa123bbb456と同じ文字列から 123だけを抽出するか、 456だけを抽出したい場合があります。この場合、正規表現の match() を使って数値パターンを見つけることができます。

例えば、 d+ は数字の 1 文字以上の文字列を意味し、 g はすべてのパターンを見つけるという意味です。 foo31bar52でこのパターンに一致するのは 3152です。したがって、戻り値を見ると、この2つの数字が返されます。

let found = "foo31bar52".match(/\d+/g);
console.log(found);

Output:

[ '31', '52' ]

上記のように match() を使って、以下のように最初に見つけた数字と二度と見つけた数字にIndexでアクセスすることができます。

let num = "foo31bar52".match(/\d+/g)[0];
console.log(num);

num = "foo31bar52".match(/\d+/g)[1];
console.log(num);

Output:

31
52
codechachaCopyright ©2019 codechacha