【发布时间】:2017-07-29 23:02:12
【问题描述】:
我有一个字符串进来,我在上面运行string.replace,它没有从字符串中删除*字符,但它正在删除|字符。
var s = "|*55.6";
s = s.replace(/[^0-9.]/, "");
console.log(s);
【问题讨论】:
标签: javascript regex
我有一个字符串进来,我在上面运行string.replace,它没有从字符串中删除*字符,但它正在删除|字符。
var s = "|*55.6";
s = s.replace(/[^0-9.]/, "");
console.log(s);
【问题讨论】:
标签: javascript regex
您缺少+ 来查找一个或多个匹配项:
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);
【讨论】:
替换字符串时需要使用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);
【讨论】:
如果要替换多个匹配项,请使用 global regular expression (/.../g):
s = s.replace(/[^0-9.]+/g, "") //=> "55.6"
编辑: 使用+ 遵循您的模式(匹配多个模式连续)将产生更少的匹配,从而使用@987654327 进行替换@run 比单独使用 g 标志更有效。我会同时使用它们。感谢Jai 在我之前在his answer 中使用此技术。
var s = "|*55.6"
s = s.replace(/[^0-9.]+/g, "")
console.log(s) //=> "55.6"
【讨论】:
您没有为您的正则表达式使用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
【讨论】:
一些答案提到了Quantifiers +,但它仍然只会替换第一个匹配项:
console.log("|*45.6abc".replace(/[^0-9.]+/, ""))
如果您需要删除所有非数字字符(. 除外),modifier/flag g 仍然是必需的
console.log("|*45.6,34d".replace(/[^0-9.]+/g, ""));
【讨论】:
这是因为替换只执行了一次。使用g 选项替换每个匹配项。
s = s.replace(/[^0-9.]/g, "");
【讨论】: