Javascript正则表达式,替换除数字以外的所有字符

时间:2012-02-16 10:08:49

标签: javascript regex

我想使用Javascript替换字符串中除0-9之外的所有字符。

为什么这个正则表达式不起作用?

 "a100.dfwe".replace(/([^0-9])+/i, "")

5 个答案:

答案 0 :(得分:39)

您需要/g修饰符来替换每个出现次数:

"a100.dfwe".replace(/[^0-9]+/g, "");

我还删除了多余的i修饰符和未使用的捕获子表达式括号。正如其他人所指出的那样,您也可以使用\D进一步缩短它:

"a100.dfwe".replace(/\D+/g, "");

答案 1 :(得分:19)

\D表示“不是数字”:

"a100.dfwe".replace(/\D/g, "")

答案 2 :(得分:3)

负数如何:

除非你有一个负数,否则使用Andy E的例子是有效的。然后它删除' - '符号,同时留下一个始终为正的数字(可能没问题)。但是,如果你想保持数字小于0,我建议如下:

 "a-100.dfwe".replace(/(?!-)[^0-9.]/g, "")    //equals -100

但请注意,因为这会留下所有' - '符号,如果您的文字看起来像“-a-100.dfwe”那么会给您一个错误

答案 3 :(得分:1)

它不起作用,因为带有重复修饰符[^0-9]的字符类+(=除数字之外的任何内容)只匹配一个非数字字符序列,例如“aaa”。 / p>

出于您的目的,使用其他人建议的/g修饰符(全局替换所有匹配项),您也可以使用预定义的字符类\D(=非数字)代替[^0-9]的{​​{1}},这将导致更简洁的正则表达式/\D+/

答案 4 :(得分:0)

基于@ user3324764的答案 - 制作原型函数并将数字转换为数字。

String.prototype.extractNumber = function ()
{
    return Number(this.replace(/(?!-)[^0-9.]/g, ""));
};

示例:

"123.456px".extractNumber(); // 123.456