2016-07-11 28 views
1

データソースから、ブラウザに表示する前にフォーマットが必要な数字が多数あります。Reg Ex:数字の末尾にある余分なゼロと小数点を削除する

数字のいくつかは末尾のゼロで表示され、数字の後には何も付かない小数点が付きます。ここで

は、私はJavascriptの正規表現の実装を達成しようとしていたものの例です:

130.0000  = 130 
132.0050  = 132.005 
16.9000  = 16.9 
140000000.00 = 140000000 
132.   = 132 
89.0   = 89 
90.0   = 90 
9000.00  = 9000 
99.0   = 99 
99.00500  = 99.005 
70   = 70 //fail, as it matches the zeros at the end if there's no decimal point 
700   = 700 //fail, as it matches the zeros at the end if there's no decimal point 

次正規表現は、小数点の前の任意のゼロも一致している最後の二つの試験を除いてすべてを正しく一致します。

[\.0]0*$ 

私に頭痛を与えていることについての助けがあれば、大歓迎です。事前に

多くのおかげで...あなたのすべての入力を取り、それらをトリミングします

+1

'[\ .0]'は、 '.'または' 0' *のいずれかを意味します。おそらく '(\ .0)'を意味します。 – Pointy

+0

私はあなたが正規表現のルートに行くと、2つの別々の正規表現を使わなければならないと思います。小数点を含む末尾の0と '\。\ d *?(0 *)$'のように(キャプチャグループ内で)末尾の0をキャプチャするために '\ .0 * $'ポイント。 2つを組み合わせることはかなり複雑に思えますが、あなたは別のアプローチをとる方が良いかもしれません。 – SpoonMeiser

+1

@SpoonMeiser:複雑ではない: '\ .0 *(?!\ d)|(\。\ d *?)0+ \ b'そして' $ 1'で置き換えます。しかし、受け入れられた答えはまだまだ良いです。 –

答えて

4

最も堅牢な機能がparseFloat次のとおりです。

あなたはその後、いずれかを使用することができます

const values = [ 
 
    '130.0000', 
 
    '132.0050', 
 
    '16.9000', 
 
    '140000000.00', 
 
    '132.', 
 
    '89.0', 
 
    '90.0', 
 
    '9000.00', 
 
    '99.0', 
 
    '99.00500', 
 
    '70', 
 
    '700' 
 
]; 
 

 
values.map(parseFloat).forEach(it => console.log(it));

特定の精度、ラウンド、再フォーマットなどを得るためのNumberメソッドの使用。

正規表現ではmany unholy thingsを実行できますが、ときどき動作する関数があります。

+0

'values.map(Number);'は十分です – Tushar

+0

'Number'コンストラクタを使用する@Tusharは、' parseInt'や 'parseFloat'とは異なる動作をして、マップへのコールバックとして使用するのは気にしません。 – ssube

+0

'values.map(parseFloat)'で十分です。矢印機能は必要ありません。 – wpcarro

関連する問題