2017-02-08 2 views
2

を使用して文字列から最初のゼロ値を削​​除:どのように私は5バックが使用していることを得ることができます私は例えば、padStart法(padLeft)を使用して文字列値を作成した正規表現

"5".padStart(19, "0") 

「0000000000000000005」にもたらされる を正規表現? 私はこれをテストしました:

/^0*(\d+)$/.exec(d)[1] 

これは正しく5を返します。

しかし、この正規表現は "00000012.22"

サンプルのようなもののためにnullを返す:> 11.22

5> 5

005> 5

0011.22 >>これが最初の問題です!

00100 >> 100

00.5 >> 1001 >> 001001 0.5これが第二の問題です!

コードを作業するが、正規表現なし:

function toDb(d) { 
     if (d == null) return null; 
     var precisionIndex = d.indexOf('.'); 
     return d.toString().padStart((29 + precisionIndex + 1), '0'); 
     } 

function fromDb(d) { 
      if (d == null) return null; 
      d = d.replace(/^0+/, ''); // I'd like to use regex here 
      if (d.indexOf('.') == 0) // I'd like to use regex here 
       d = '0' + d; // I'd like to use regex here 
      return d; 
    } 

fromDb(toDb( '0.5'))私にとっては0.5を返します。しかし私は私のコードで正規表現を使用したいと思います。

+1

実際には、そのようなタスクに対処するための正規表現がありますが、それを本当に理解したいと思えば、それは非常に長く、むしろ不自由なものになります。 –

答えて

3

0の代わりにString#replaceメソッドを使用してください。正規表現start anchor(^)

console.log(
 
    "0000000000000000005".replace(/^0+(?=\d)/, '') 
 
) 
 

 
console.log(
 
    "000000000000000000.5".replace(/^0+(?=\d)/, '') 
 
)

文字列の先頭位置を主張し、0+初めに完全に、0^0+マッチ0 Sを組み合わせone or more repetitionに一致します。

UPDATE:はちょうど.使用positive look ahead assertion0を削除しないようにするには、数字の後に続く0まで(?=\d)試合。

+0

007より優れたテスト文字列が作成されます。 – Aron

+1

私は本当にあなたの答え+それは4時間高速です( - :あなたの詳細情報ありがとう) –

+1

@ YaserMoradi:うれしかった:) –

関連する問題