5

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

私の現在の正規表現は

/(?!-)?(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" );        
    });
});

テストケースが合格しないのはなぜですか?

4

3 に答える 3

4

これですべてのケースが終了します

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

^文字列の先頭に一致します。

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

(0+)(?=\d)一連の0とそれに続く数字に一致します。これ(?=\d)先読みアサーションです。一致しませんが、数字が先行ゼロの後に続くことを確認してください。

于 2012-05-16T20:48:38.987 に答える
2

これはテストに合格し、比較的読みやすいです。

var r = function(val){
    var re = /^(-?)(0+)(0\.|[1-9])/;
    return val.toString().replace( re, '$1$3');
};
于 2012-05-16T20:54:50.853 に答える
1

次を使用できます。

var r = function(val) {
    var re = /(-)?0*(\d.*)/;
    var matches = val.toString().match(re);
    return (matches[1] || '') + matches[2];
};
于 2012-05-16T20:45:19.460 に答える