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

Use Regex to form a number without leading zeros in Javascript

本文关键字:一个 数字 Javascript 正则表达式      更新时间:2023-09-26

我在形成一个正则表达式时遇到了问题,该表达式可以从表示为字符串的数字中删除前导零。抱歉,parseFloat 不是我想要的,因为我将处理小数点后 30+ 位的数字。

我目前的正则表达式是

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

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

这样就完成了你所有的情况

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

^字符串的开头匹配。

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

(0+)(?='d)匹配一系列 0 和数字后面的数字。(?='d)是一个前瞻断言,它不匹配,但确保数字跟随前导零。

这通过了您的测试,并且相对容易阅读:

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

您可以使用以下内容:

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