正则表达式在所有未完成的小数前面放一个前导零|| .5 = 0.5



我正在尝试创建一个正则表达式,将字符串如"5+.34+3"转换为"5+0.34+3"。基本上,我试图在所有没有前导零的小数前面添加一个前导零。


一些示例

<表类> 输入输出改变tbody><<tr>".34""0.34">(添加零的小数)"1.45">"1.45">(没有变化)"66+ 0.33+22+0.32">"66+0.33+22+0.32">(除外,所有小数点前加零)"5 + .22""5 + 0.22">(添加零前.22)

需要替换任何没有以数字字符作为前缀的小数分隔符。因此,一个有效的方法是使用replace运行一个regex,该regex具有负向后看功能,并且确实捕获了十进制分隔符的字符。

正则表达式看起来像这样…/(?<!d)(.)/g……读起来是这样的…

  • / ... /g
  • / ... (.)/g…捕获所需的分隔符…
  • / (?<!d) ... /g…它不是(<!)前加一个数字(d)…

const sample = `
.34
1.45
66+.33+22+.32
5+.22 5+0.22 5+.22`;
const regXNonLeadingDigitDecimalSeparator = (/(?<!d)(.)/g);
console.log(
'original ...',
sample
);
console.log(
'sanitized ...',
sample.replace(regXNonLeadingDigitDecimalSeparator, '0$1')
);
console.log(
'some other separator sample ...n',
'0,45; ,78; 0,78; 0.9; .9 =>',
'0,45; ,78; 0,78; 0.9; .9'.replace((/(?<!d)(,)/g), '0$1')
)
.as-console-wrapper { min-height: 100%!important; top: 0; }

可以操作更多的正则表达式

const floats = [".34", "1.45", "66+.33+22+.32", "5+.22"].map(str => {
return  str.split('+').map(part => part.startsWith(".") ? "0"+part : part).join('+')
})
console.log(floats)

最新更新