String.Replace Regex不会在字符串中替换`*`



我有一个字符串,我在其上运行一个string.replace,并且它没有从字符串中删除*字符,但它正在删除|字符。

var s = "|*55.6";
s = s.replace(/[^0-9.]/, "");
console.log(s);

如果要替换多个匹配,请使用全局正则表达式(/.../g):

s = s.replace(/[^0-9.]+/g, "") //=> "55.6"

编辑:使用+遵循模式(与连续中的模式中的多种模式)会产生较少的匹配项,从而使""替换更有效地替换而不是仅使用g标志。我会一起使用它们。归功于Jai在我面前的回答中使用了这种技术。


演示片段

var s = "|*55.6"
s = s.replace(/[^0-9.]+/g, "")
console.log(s) //=> "55.6"

这是因为替换仅执行一次。使用g选项替换每场比赛。

s = s.replace(/[^0-9.]/g, "");

您尚未为正则for使用全局旗

var s = "|*55.6";
s = s.replace(/[^d.]/g, "");
console.log(s);

如果您有单独的[^d.]出现,则仅使用+量词将无济于事,尽管最好与g标志一起使用。例如;

var s = "|*55.6a"
s = s.replace(/[^0-9.]+/, "")
console.log(s) //=> "55.6a not OK

替换字符串时,您需要使用全局(g)标志/修饰符或加号(+)量词;

var s = "|*55.6";
s = s.replace(/[^0-9.]/g, "");
console.log(s);

var s = "|*55.6";
s = s.replace(/[^0-9.]+/, "");
console.log(s);

您缺少+寻找一个或多个出现:

var s = "|*55.6";
s = s.replace(/[^0-9.]+/, "");
console.log(s);

另外,如果您有兴趣外卖数字,则可以使用.match()方法:

var s = "|*55.6";
s = s.match(/[(0-9.)]+/g)[0];
console.log(s);

一些答案提到了量词+,但它仍然只能替换第一匹配:

console.log("|*45.6abc".replace(/[^0-9.]+/, ""))

如果您需要删除所有非数字字符(.除外),则仍然需要修改器/标志g

console.log("|*45.6,34d".replace(/[^0-9.]+/g, ""));

最新更新