简单的JavaScript正则表达式去除数字

8

我想做的就是从一个字符串中去除所有数字。

因此

var foo = "bar01";
alert(foo.replace(/\d/,''));

很明显,由于我只指定了一个数字,所以得到的是"bar1"。那么为什么这个方法不起作用呢?
var foo = "bar01";
alert(foo.replace(/\d*/,''));

这句话的意思是:“这个代码会输出‘bar01’”。

已经找到答案了,正确的符号是 . 而不是 * - joedborg
很遗憾,你提到的方法只适用于特定的“bar01”情况,因为你要匹配一个数字后面跟着任何字符。这不会删除字符串末尾的数字,或者超过2个数字等。请查看其他解决方案以获得更好的解决方法。 - GregL
4个回答

18

您必须添加global选项

var foo = "bar01";
alert(foo.replace(/\d/g,''));

显然,你甚至可以做一些像这样的事情

var foo = "bar01";
alert(foo.replace(/\d+/g,''));

但我不知道它是否会更快(最终速度差异非常小,除非您解析的文本有兆字节大小)
如果您想测试http://jsperf.com/replace-digits,第二个似乎对于10位数字和大型文本的“块”更快。

不确定速度是快还是慢,但在正则表达式中使用/\d+/g更有意义。 - GregL
@GregL 就像我之前说的,我不知道。有一个网站可以进行这种比较,但我不记得它的名字了。 - xanatos
@xanatos 是的,我刚刚也进行了一个jsPerf测试。比较这两个测试结果会很有趣:http://jsperf.com/regex-global-sequence-vs-single-digit。 但无论哪种情况,我都是正确的——/\d+/g更快。 - GregL
@GregL 从技术上讲,您在评论中都没有写出哪个更快:-) 第一个是“不确定是更快还是更慢”,并在“更有意义”的情况下结束,所以我认为它是“从人的角度来看更有意义”。 - xanatos
@xanatos 说得对,我之前只是猜测,直到我在 jsperf 上进行了基准测试后才确定了(至少在已经测试过的浏览器上)。 - GregL
显示剩余3条评论

2
alert(foo.replace(/\d+/g,''));

2
您可能需要指定g标志:foo.replace(/\d/g,'')

1

尝试使用“global”标志:

foo.replace(/\d*/g,'')


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