2012-02-16 15 views

答えて

30

"a100.dfwe".replace(/[^0-9]+/g, ""); 

を私はまた、冗長i修飾子を削除し、未使用の撮影部分式はあなたのためにブレース。他の人が指摘したように、あなたはまた、さらにそれを短くする\Dを使用することができます。

"a100.dfwe".replace(/\D+/g, ""); 
+0

はあなたに感謝し、 "+" は、のために正確に何を立つのでしょうか? –

+0

@PrakashRaman:これは*上記の文字のうちの1つ以上と一致することを意味します*。それは必要ではありませんが、必要な置換の数を減らすことによって正規表現のパフォーマンスを少し向上させます。 –

+0

(技術的にはこの答えは質問に答えますが、浮動小数点では失敗します) "123.456px" .replace(/ \ D +/g、 ""); - > 123456 –

17

\Dは「ない数字」を意味します

"a100.dfwe".replace(/\D/g, "") 
+0

最もコンパクトなフォームです。 – Oybek

1

それが原因で文字クラス[^0-9]動作しません(=反復修飾子+の数字以外の文字は、 "aaa"などの非数字文字の1つのシーケンスにのみ一致します。あなたの目的のために

、他の人が提案として(グローバルすべてのマッチを置き換えるために)/g修飾子を使用して、あなたはまたにつながるれ、代わりに[^0-9]の事前定義された文字クラス\D(=数字ではなく)を使用することができますより簡潔な正規表現/\D+/

+0

より良いことを理解する "a"と ".dfwe"は+グループの下に来てはなりません。なぜならそれは1以上であるからです。 –

+3

'\ D +'は "1つ以上の非数字"を表示しますが、 '(\ D)+'はあなたが望むものではない(同じ)非数字の1つ以上の繰り返しを探します。 ここでは、 '/ \ D/g'(1桁の数字以外のすべての数字を置き換えます)、'/\ D +/g'(数字以外のすべての数字を置き換えます)何千もの文字列を処理しない限り目立たないでしょう。 – fanaugen

+0

ああ、ありがとう。それは私に事を完全に説明します。ありがとう! –

2

負の数値はどうですか:

負の数がない限り、Andy Eの例を使用します。それから、 ' - '記号も取り除かれ、常に正の数(あなたは大丈夫かもしれません)を残します。しかし、あなたが0未満の数を維持したい場合、私は次のことを示唆している:

"a-100.dfwe".replace(/(?!-)[^0-9.]/g, "") //equals -100 

しかし、これはすべてを残しているので、注意してください「 - 」記号を、あなたのテキストは「-A-のように見える場合にエラーを与えます100.dfwe "

+0

彼は実際に数字について話すのではなく、数字のグループだけです。とにかく正規表現は文字列の先頭にないので、 '-'とマッチします。 –

0

@ user3324764の答えに基づいて - プロトタイプ関数を作成し、数値を数値に変換します。

String.prototype.extractNumber = function() 
{ 
    return Number(this.replace(/(?!-)[^0-9.]/g, "")); 
}; 

例:

"123.456px".extractNumber(); // 123.456 
関連する問題