从字符串中删除值

3

有人知道如何从字符串中删除所有前导零吗?

var str = 000890

字符串的值是时刻变化的,所以我需要它能够在大于0的数字前移除所有的0。因此,在上面的示例中,它需要移除前三个0。因此结果将是890。

9个回答

9

看起来我们每个人都有自己的做法。我在jsperf.com上创建了一个测试,但结果显示:

String(Number('000890'));

这是谷歌浏览器中最快的(速度最快)。
这是基于 @BenLee 在 Firefox、IE 和 Chrome 上的评论更新测试的数字。
请参见此处的数据图表。

对于我的Chrome 16(适用于Linux),我在选项2和3的性能上比你更接近(我的结果是正则表达式:5毫秒,类:17毫秒,parseInt:15毫秒,类型转换:22毫秒)。 - Ben Lee
1
哦,我应该提一下,我是为 '' + +str 添加第四个测试的人,结果它实际上是最快的竞争者,比第二快的快了约50%,比最慢的快了5倍。 - Ben Lee

5
请参见:此问题
var resultString = str.replace(/^[0]+/g,"");

4
var resultString = str.replace(/^[0]+/g,"");

抱歉...显然我们想法一致。 - Anders
1
@Anders 不用担心 - 聪明人往往想得一样 :) - Zoltan Toth
抽签的运气,恭喜你 ;) - Anders
方括号是可选的。全局标志是不必要的,因为只能存在一个“字符串开始”。以下模式将起作用:/^0+/ - Rob W

2
如果您的问题确实如您所定义的那样,那么请使用其他人发布的基于正则表达式的答案之一。如果问题只是您在字符串中有一个零填充的整数,并且需要操纵整数值而不是零填充,则可以像这样将其转换为整数:
parseInt("000890", 10) # => 890

请注意,这里的结果是整数890而不是字符串"890"。还要注意,这里需要使用十进制,因为该字符串以零开头。

2
我认为这样的功能应该可以工作。
   function replacezeros(text){    
      var newText = text.replace(/^[0]+/g,"");
      return newText;
}

1
这个我可能会抢不到先机。 - Dominic Green

2
如果需要保持字符串形式,将其转换为数字,再将其转换回字符串:
var num = '000123';
num = String(Number(num));
console.log(num);

您还可以使用简写方式num = ''+(+num);。不过,我认为第一种形式更易读。

我认为最清晰的解决方案String(Number(num))以及最快速的解决方案''+(+num)(请参见JesseB的回答以确认)同时发布,给你一个赞。 - Ben Lee

2
parseInt('00890', 10); // returns 890
// or
Number('00890'); // returns 890 

1

return str.replace(/^0+(.)/, '$1'));

这意味着:将最大数量的前导零替换为任何单个字符(不是零),并用该单个字符替换它。这是必要的,以免吞噬单个“0”。


-1

你可以直接删除引号来实现这个功能。

var str = 000890;
//890
var str = "000890";
//000890

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