在Javascript中删除字符串的前导零

17
我有这样一种情况,需要从字符串中删除任何前导零,例如02-0302&030203。我有这个正则表达式(s.replace(/^0+/, '');)来删除前导零,但我需要能够处理上述情况的内容。

let strings = [`02-03`, `02&03`, `02`,`03`]
strings.forEach(s => {
  s = s.replace(/^0+/, '');
  console.log(s)
})


我有这个 JSFiddle 来进行测试:http://jsfiddle.net/sMgSp/94/。 - Lucky
2个回答

37

最简单的解决方案可能是使用单词边界 (\b),像这样:

s.replace(/\b0+/g, '')

这将删除任何不以拉丁字母、十进制数字或下划线为前缀的零。全局 (g) 标志用于替换多个匹配项(否则它只会替换找到的第一个匹配项)。

$("button").click(function() {
  var s = $("input").val();
  
  s = s.replace(/\b0+/g, '');
  
  $("#out").text(s);
});
body { font-family: monospace; }
div { padding: .5em 0; }
#out { font-weight: bold; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div><input value="02-03, 02&03, 02,03"><button>Go</button></div>
<div>Output: <span id="out"></span></div>


不适用于小数。例如,对于“0.5”,返回“.5”,这是不期望的。 - Glogo
4
@Glogo 好的,这不是最初要求的一部分,但如果你的使用情况需要,你可以使用s.replace(/\b0+(0\.\d+)/g, '$1')来处理小数,或者使用s.replace(/\b(?:0*(0\.\d+)|0+)/g, '$1')来处理小数或整数(请注意需要前导零以识别小数,例如.005将被视为整数)。 - p.s.w.g
谢谢,解决了问题 :) - Glogo
1
它甚至从小数部分中去除零 :( 例如,'0030.005' 返回 '30.5' - fllprbt

2
s.replace(/\b0+[1-9]\d*/g, '')

应该将任何在单词边界之后且在非零数字之前的零替换掉。我认为这就是您在此处寻找的内容。

好的,现在它可以编译了,但它只会匹配至少有3个数字的数字(所以02不会受影响),并且它将删除整个数字,而不仅仅是前导零。 - p.s.w.g

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接