我使用以下内容确保字符串只是数字:
myStr.match(/^[0-9]*$/g);
但我希望通过在开头忽略任何零来改进它,除非它是唯一的数字,或者如果全部为零则只返回0。
我喜欢这样的事情:
myStr = "0"; //--> match = 0
myStr = "00"; //--> match = 0
myStr = "10"; //--> match = 10
myStr = "05"; //--> match = 5
myStr = "000007"; //--> match = 7
我想这里的第二行让事情变得更棘手,因为我还在检查是否只有零。也许这对于正则表达式来说太过分了。我发现了很多检查它是否从零开始并跳过它的例子,但是我很难找到能够抓住其余数字并忽略零的东西。
编辑:就parseInt()而言,遗憾的是,这是一个After Effects表达式,它使用较旧版本的ECMAScript。像parseInt(" 010")之类的东西返回8(八进制)。
答案 0 :(得分:3)
没有lookbehind(即将推出JavaScript),除了正则表达式之外,你还需要一个捕获组或其他逻辑。
这是捕获组版本:
/^0*(\d+)$/
(非常感谢ctwheels指出我早期的0|[1-9]\d*
可以缩短为\d+
[因为我们已经消耗了任何前导零除外使用前导\d+
]来满足0*
!)
示例:
var rex = /^0*(\d+)$/;
function test(myStr, expect) {
var match = myStr.match(rex);
var val = match ? match[1] : null;
console.log(myStr, val, val === expect ? "Good" : "ERROR");
}
test("0", "0");
test("00", "0");
test("10", "10");
test("05", "5");
test("000007", "7");