使用正则表达式在Javascript中形成一个不带前导零的数字

Lar*_*tle 5 javascript regex qunit

我在编写一个正则表达式时遇到问题,该正则表达式可以从表示为字符串的数字中删除前导零.对不起,但是parseFloat不是我想要的,因为我将处理30位以上的数字.

我目前的正则表达式是

/(?!-)?(0+)/;
Run Code Online (Sandbox Code Playgroud)

这是我的测试用例. 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" );        
    });
});
Run Code Online (Sandbox Code Playgroud)

为什么我的测试用例没有通过?

ste*_*ema 3

这完成了您的所有案例

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

^匹配字符串的开头。

(-)?匹配一个可选的,-这将被重新插入到替换字符串中。

(0+)(?=\d)匹配一系列 0 及其后的数字。这(?=\d)是一个前瞻断言,它不匹配,但确保数字位于前导零之后。