String.replace正则表达式不替换字符串中的`*`

时间:2017-03-09 05:11:42

标签: javascript regex

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



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




6 个答案:

答案 0 :(得分:4)

如果您想要替换多个匹配项,请使用global regular expression/.../g):

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

修改:使用+跟随您的模式(其中一个模式连续匹配)将产生更少的匹配,从而替换为""比单独使用g标志更有效率。我会一起使用它们。感谢Jaihis answer之前使用此技术。

<小时/>

Demo Snippet

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

答案 1 :(得分:1)

你还没有使用global flag作为你的正则表达式,这就是为什么第一次出现被替换,而不是操作结束。

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

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

您缺少+来查找一个或多个事件:

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

此外,如果您有兴趣取出数字,那么您可以使用.match()方法:

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

答案 4 :(得分:1)

替换字符串时需要使用global (g) flag / modifierplus (+) quantifier;

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

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

答案 5 :(得分:0)

有些回答提到Quantifiers +,但它仍然只会替换第一个匹配:

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

如果您需要移除所有非数字字符(.除外),则仍需要modifier/flag g

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