我有一个字符串,我正在运行string.replace
并且它没有从字符串中删除*
字符,但它正在删除|
字符。
var s = "|*55.6";
s = s.replace(/[^0-9.]/, "");
console.log(s);

答案 0 :(得分:4)
如果您想要替换多个匹配项,请使用global regular expression(/.../g
):
s = s.replace(/[^0-9.]+/g, "") //=> "55.6"
修改:使用+
跟随您的模式(其中一个模式连续匹配)将产生更少的匹配,从而替换为""
比单独使用g
标志更有效率。我会一起使用它们。感谢Jai在his answer之前使用此技术。
var s = "|*55.6"
s = s.replace(/[^0-9.]+/g, "")
console.log(s) //=> "55.6"

答案 1 :(得分:1)
你还没有使用global flag作为你的正则表达式,这就是为什么第一次出现被替换,而不是操作结束。
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

答案 2 :(得分:1)
因为替换只执行一次。使用g
选项替换每场比赛。
s = s.replace(/[^0-9.]/g, "");
答案 3 :(得分:1)
您缺少+
来查找一个或多个事件:
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);

答案 4 :(得分:1)
替换字符串时需要使用global (g
) flag / modifier或plus (+
) quantifier;
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);

答案 5 :(得分:0)
有些回答提到Quantifiers +
,但它仍然只会替换第一个匹配:
console.log("|*45.6abc".replace(/[^0-9.]+/, ""))
如果您需要移除所有非数字字符(.
除外),则仍需要modifier/flag g
console.log("|*45.6,34d".replace(/[^0-9.]+/g, ""));