Javascript 如果每个字符都在0-9范围内,则去掉所有前导零

Javascript 如果每个字符都在0-9范围内,则去掉所有前导零,javascript,regex,Javascript,Regex,这是我第一次使用正则表达式,所以我想发布这篇文章,看看它是否合适: if (/^[0-9]+$/.test(x)) { x = x.replace(/^0+/,''); } 意思是: 如果每个字符都在0-9范围内,则去掉所有前导零 问:我做对了吗?是的,但你可以更聪明 x = x.replace(/^0+(?=\d+$)/,""); 这增加了聪明的额外好处: x = "000000"; x = x.replace(/^0+(?=\d+$)/,""); alert(x); // 0 例

这是我第一次使用正则表达式,所以我想发布这篇文章,看看它是否合适:

if (/^[0-9]+$/.test(x)) {
   x = x.replace(/^0+/,'');
}
意思是:

如果每个字符都在0-9范围内,则去掉所有前导零


问:我做对了吗?

是的,但你可以更聪明

x = x.replace(/^0+(?=\d+$)/,"");
这增加了聪明的额外好处:

x = "000000";
x = x.replace(/^0+(?=\d+$)/,"");
alert(x); // 0

例如,如果输入完全由零组成,则将保留一个零。

如果更聪明的解决方案在学习正则表达式时有点令人费解,则可以使用更简单的解决方案

if (/^[0-9]+$/.test(x)) {
   x = x.replace(/^(0+)([0-9]+)/, "$2");
}
将字符串替换为第二个(即
$2
)捕获

为了进一步开发它,您可以使用
?:
,告诉它不要记住第一次捕获,这使它成为所谓的非捕获组,在这种情况下,您要保留的捕获数为
1

  x = x.replace(/^(?:0+)([0-9]+)/, "$1");
编辑:

正如Niet the Dark Absol善意地指出的,因为你不需要第一组,所以不要在它周围加括号:

   x = x.replace(/^0+([0-9]+)/, "$1");

互联网上有很多正则表达式测试员。您是否使用了它们中的任何一个来测试您的正则表达式?或者只是运行javascript看看会发生什么。我从jsfiddle.net开始,但我不知道我是否想到了每个场景。比如:“你用null试过了吗?”如果你测试null,它将与你的正则表达式不匹配。对于困惑:(?=…)被称为“前瞻”:你甚至不需要把第一个组括起来<代码>/^0+(\d+)$/可以使用。如果你记得把
$
放在末尾。@NiettheDarkAbsol我试过了,有尾随的
$
和没有尾随的
$
都没有区别,我想是因为
.test
已经确定了行的剩余部分是数字。啊,这是真的。您仍然有
.test
。可以