我有一个字符串,我在其上运行一个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, ""));