往后看替换所有出现的地方

Look behind replace all occurrences

我想用 0.digit 替换所有出现的 .digit。

我是正则表达式的新手,但据我所知,我可以使用 look behind 来做到这一点。但是 JS 不支持那个,我想知道是否有人知道解决方案。 为了显示问题,我编写了以下代码。

str = "0.11blabla.22bla0.33bla.33"
allow = "\.\d*"
str.match(new RegExp(allow,"g"))
[".11", ".22", ".33", ".33"]
deny = "0\.\d*"
str.match(new RegExp(deny,"g"))
["0.11", "0.33"]
diffreg= new RegExp("(?!"+deny+")"+allow,"g") // translates to: /(?!0\.\d*)\.\d*/g
str.match(diffreg)
[".11", ".22", ".33", ".33"]

显然allow匹配所有的十进制值而deny匹配所有前面带0的值。结果当然应该是两者之间的集合差值:[".33", ".33"].

我认为您正在寻找这个正则表达式

  [0]?(\.\d*)

因此在您的代码中您将拥有:

intersectionreg = new RegExp("[0]?("+allow+")","g")

感谢@richard,已编辑

使用 group match.

> str.replace(/([^0])(\.\d)/g, "");
"0.11blabla0.22bla0.33bla0.33"