我想使用Javascript替换字符串中除0-9之外的所有字符。
为什么这个正则表达式不起作用?
"a100.dfwe".replace(/([^0-9])+/i, "")
答案 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