Javascript 字符串替换为regexp将覆盖不匹配的字符
其想法是将所有小数点前没有数字的十进制数替换为零,这样Javascript 字符串替换为regexp将覆盖不匹配的字符,javascript,regex,Javascript,Regex,其想法是将所有小数点前没有数字的十进制数替换为零,这样.03 sqrt(.02)将变成0.03 sqrt(0.02) 有关示例,请参见下面的代码,问题是当小数点前有一个圆括号时,替换将覆盖圆括号。我认为括号不属于匹配字符串,是吗 s='.05 sqrt(.005)另一个(.33)这不应该改变(a.b)也不应该改变(3.4)' s=s.replace(/(?:^|\D)\.(\D+)/g,“0.1美元”); console.log使您的初始组捕获而不是非捕获,并在替换中使用它: s=s.repl
.03 sqrt(.02)
将变成0.03 sqrt(0.02)
有关示例,请参见下面的代码,问题是当小数点前有一个圆括号时,替换将覆盖圆括号。我认为括号不属于匹配字符串,是吗
s='.05 sqrt(.005)另一个(.33)这不应该改变(a.b)也不应该改变(3.4)'
s=s.replace(/(?:^|\D)\.(\D+)/g,“0.1美元”);
console.log
使您的初始组捕获而不是非捕获,并在替换中使用它:
s=s.replace(/(^|[^\d])\.(\d+)/g , "$10.$2");
// ^---- capturing, not non-capturing
例如:
s='.05 sqrt(.005)另一个(.33)这不应该改变(a.b)也不应该改变(3.4)'
s=s.replace(/(^[^\d])\(\d+)/g,“$10.$2”);
console.log
括号是nn位,因此它与[^\d]
匹配并删除
解决方案是匹配并捕获圆点之前的零件,然后使用替换的反向参考插入
使用
看
图案细节
-捕获组1(稍后从替换模式中用(^ |\D)
引用):字符串或任何非数字的开头($1
=[^\D]
)\D
-一个点\。
-捕获第2组(后面用替换模式中的(\d+)
引用):1+位数$2
s='.05 sqrt(.005)另一个(.33)这不应该(a.b)也不应该(3.4)'
s=s.replace(/(^\D)\(\D+)/g,“$10.$2”);
console.log
为了清晰起见,请使用反勾号而不是黑体来调用内联代码。使用s.replace(/(^\124;\ D)\.(\D+)/g,“$10.2”)
您不必将单个标记\D
放入字符类,[\D]
=\D
@Wiktor,谢谢。我将编辑以更清楚地说明问题的要点
.replace(/(^|\D)\.(\d+)/g , "$10.$2")