2012-05-16 5 views
5

文字列として表された数字から先行ゼロを取り除くことができる正規表現を作成する際に問題があります。申し訳ありませんが、parseFloatは30桁以上の小数点以下の数値を処理するので、私が探しているものではありません。Javascriptで先行ゼロなしの数字を形成するためにRegexを使用してください。

私の現在の正規表現はここ

/(?!-)?(0+)/; 

では、私のテストケースです。 http://jsfiddle.net/j9mxd/1/

$(function() { 
    var r = function(val){ 
     var re = /(?!-)?(0+)/; 
     return val.toString().replace(re, ''); 
    }; 
    test("positive", function() { 
     equal(r("000.01"), "0.01"); 
     equal(r("00.1"), "0.1"); 
     equal(r("010.01"), "10.01"); 
     equal(r("0010"), "10"); 
     equal(r("0010.0"), "10.0"); 
     equal(r("10010.0"), "10010.0"); 
    }); 
    test("negative", function() { 
     equal(r("-000.01"), "-0.01"); 
     equal(r("-00.1"), "-0.1"); 
     equal(r("-010.01"), "-10.01"); 
     equal(r("-0010"), "-10"); 
     equal(r("-0010.0"), "-10.0"); 
     equal(r("-10010.0"), "-10010.0");   
    }); 
}); 

なぜ私のテストケースは合格していませんか?

+0

実際に間違っている、とのいずれかを傷つけるかもしれない、実際の質問をしているもので、いくつかの洞察を提供してください。 –

+0

質問は「なぜ私のテストは合格していないのですか? –

+0

すべては? OK ... –

答えて

4

これは、すべての例の文字列の先頭に

var re = /^(-)?0+(?=\d)/; 
return val.toString().replace(re, '$1'); 

^試合を終了します。

(-)?は、オプションの-と一致します。これは、置換文字列に再挿入されます。

(0+)(?=\d)は、一連の0と数字の後に続く数字と一致します。 (?=\d)lookahead assertionで、一致しませんが、数字が先頭の0に続くことを確認してください。

+0

何が?=意味ですか? –

+0

@LarryBattle私は説明を追加しました – stema

1

は、次を使用することができます。

var r = function(val) { 
    var re = /(-)?0*(\d.*)/; 
    var matches = val.toString().match(re); 
    return (matches[1] || '') + matches[2]; 
}; 
2

これは、あなたのテストに合格し、読みが比較的容易である:

var r = function(val){ 
    var re = /^(-?)(0+)(0\.|[1-9])/; 
    return val.toString().replace(re, '$1$3'); 
}; 
+0

後方参照を使用している非常にきれいな食器。 –

+0

先読みはよりよい解決策です - 私は答えを編集していましたが、最初に提案しました。 – AD7six

関連する問題