[英]Use Regex to form a number without leading zeros in Javascript
我在编写一个正则表达式时遇到问题,该正则表达式可以从表示为字符串的数字中删除前导零。 对不起,但是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];
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.