我正在尝试创建一个正则表达式,将字符串如"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)