往后看替换所有出现的地方
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"
我想用 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"