JavaScriptを使用して数値のみを返す正規表現


129

「something12」または「something102」のような文字列がある場合、javascriptで正規表現を使用して数値の部分だけを返すにはどうすればよいですか?

回答:


226

正規表現:

var numberPattern = /\d+/g;

'something102asdfkj1948948'.match( numberPattern )

これにより、「102」と「1948948」の2つの要素を含む配列が返されます。思い通りに操作してください。一致しない場合はnullを返します。

それらを連結するには:

'something102asdfkj1948948'.match( numberPattern ).join('')

あなたが複素数の小数を扱っていないと仮定すると、これは私が推測することで十分でしょう。


3
エラー。nit-pickyであることが嫌いですが、これはオブジェクトではなく配列を返します(少なくともchromeでは)。
Maus

14
すべての配列はオブジェクトですが、違いますか?
meder omuraliev

6
@MuhammadUmer-やってみましたか?
meder omuraliev 2013

2
@Onzaはの前にバックスラッシュがないdので、.match(/\d+/g)
meder omuraliev '20 / 06/20

10
@ MuhammadUmer、@ meder:2人は力を組み合わせる必要があります: parseInt('987d98sf79s7f9s8f9sf'.match(/\d+/gi).join(''))
Joisey Mike

199

数字以外の文字(\Dまたは[^0-9])をすべて取り除くこともできます。

let word_With_Numbers = 'abc123c def4567hij89'
let word_Without_Numbers = word_With_Numbers.replace(/\D/g, '');

console.log(word_Without_Numbers)


まあ、OPは文字列ではなく「数字の部分だけ」を必要とすることを除いて。
スコットフレーリー

24

小数とマイナス記号のある数値の場合、次のスニペットを使用します。

 var NUMERIC_REGEXP = /[-]{0,1}[\d]*[.]{0,1}[\d]+/g;

'2.2px 3.1px 4px -7.6px obj.key'.match(NUMERIC_REGEXP)
// return ["2.2", "3.1", "4", "-7.6"]

更新:-2018年7月9日

正規表現を視覚的に編集できるツールが見つかりました:JavaScript正規表現パーサー&ビジュアライザー

更新:

もう1つは、正規表現をデバッガーで使用できるものです。オンラインの正規表現テスターとデバッガーです。

更新:

もう1つ:RegExr

更新:

Regexperおよび Regex Pal


小数と負の
数値

17

数字のみが必要な場合:

var value = '675-805-714';
var numberPattern = /\d+/g;
value = value.match( numberPattern ).join([]);
alert(value);
//Show: 675805714

今、あなたは数字を結合します


9

文字列から数値を取得したいと思います。その場合、以下を使用できます。

// Returns an array of numbers located in the string
function get_numbers(input) {
    return input.match(/[0-9]+/g);
}

var first_test = get_numbers('something102');
var second_test = get_numbers('something102or12');
var third_test = get_numbers('no numbers here!');

alert(first_test); // [102]
alert(second_test); // [102,12]
alert(third_test); // null

1
明確にするためにget_numbers/1、数値ではなく文字列の配列を返します。あなたの例では、それが返されます:* ["102"]* ["102", "12"]*ヌル
息子TRAN-グエン

2

与えられた答えは、実際に暗黙のあなたの質問、一致していない末尾の番号を。また、文字列が返されることを忘れないでください。実際に数値が必要な場合は、結果をキャストします。

item=item.replace('^.*\D(\d*)$', '$1');
if (!/^\d+$/.test(item)) throw 'parse error: number not found';
item=Number(item);

Webページで数値のアイテムIDを処理している場合、コードはを受け入れてElement、そのid(またはの最初の親id)から番号を抽出することもできます。あなたがEvent便利であれば、おそらくそれElementからも得ることができます。


これは気の利いた答えですが、他の答えは「実際には[質問]と一致しない」とは思いません。実際、他の答えはより用途が広いです。末尾の数字だけでなく、途中の数字も使用できます。OPが末尾の数値でのみ機能することを望んでいると想定するのは少しおかしいです。
Xandor


2

IMO 現時点でのChen Dachaoによる3番目の回答は、あらゆる種類の数値をキャプチャする場合に適切な方法ですが、正規表現は次のように短縮できます。

/[-]{0,1}[\d]*[\.]{0,1}[\d]+/g

に:

/-?\d*\.?\d+/g

たとえば、次のコード:

"lin-grad.ient(217deg,rgba(255, 0, 0, -0.8), rgba(-255,0,0,0) 70.71%)".match(/-?\d*\.?\d+/g)

この配列を生成します:

["217","255","0","0","-0.8","-255","0","0","0","70.71"]

MDN線形勾配の例を屠殺して、正規表現を完全にテストし、ここでスクロールする必要がないようにしました。負の数、小数、単位の接尾辞(度や%など)、一貫性のないカンマとスペースの使用、およびテキスト「lin-grad.ient 」何か足りない場合はお知らせください。それが処理しないことを私が見ることができる唯一のことは、「0..8」のような間違った形式の10進数です。

本当に数値の配列が必要な場合は、配列全体を同じコード行で変換できます。

array = whatever.match(/-?\d*\.?\d+/g).map(Number);

CSS関数を解析する私の特定のコードは、ドット/ピリオド文字の非数値的な使用について心配する必要がないため、正規表現をさらに簡単にすることができます。

/-?[\d\.]+/g

2

分割と正規表現を使用する:

    var str = "fooBar0123".split(/(\d+)/);
    console.log(str[0]); // fooBar
    console.log(str[1]); // 0123

1

@Syntleの回答によると、数字以外の文字のみが含まれている場合、を取得しUncaught TypeError: Cannot read property 'join' of nullます。

これにより、一致するものが見つからない場合のエラーを回避し、空の文字列を返します。

('something'.match( /\d+/g )||[]).join('')



0

他のソリューションにあるすべてのものですが、少し検証されています

// value = '675-805-714'
const validateNumberInput = (value) => { 
    let numberPattern = /\d+/g 
    let numbers = value.match(numberPattern)

    if (numbers === null) {
        return 0
    }  

    return parseInt(numbers.join([]))
}
// 675805714
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.