我们有一些JS脚本用于评估计算,但是我们遇到了前导零的问题。 JS将带有前导零的数字视为八进制数。 所以我们使用正则表达式删除所有前导零:
\b0+(\d+)\b
示例数据:
102
1,03
1.03
004
05
06+07
08/09
010,10,01
00,01
0001
01*01
010,0
0,0000001
5/0
(也在线https://regex101.com/r/mL3jS8/2)
正则表达式工作得很好但不包括数字,包括','或者'。'。这被视为单词边界,零也被删除。
我们找到了一个使用负面lookbehinds / lookforwards的解决方案,但JS并不支持。
痛苦地说,我们的正则表达式知识在这里结束了:(谷歌并不喜欢我们。
任何可以帮助我们的人?
答案 0 :(得分:4)
如果我理解正确,以下内容应该有效:
/(^|[^\d,.])0+(\d+)\b/
将匹配项替换为$1$2
。
<强>解释强>
( # Match and capture in group 1:
^ # Either the start-of-string anchor (in case the string starts with 0)
| # or
[^\d,.] # any character except ASCII digits, dots or commas.
) # End of group 1.
0+ # Match one or more leading zeroes
(\d+) # Match the number and capture it in group 2
\b # Match the end of the number (a dot or comma could follow here)
答案 1 :(得分:0)
如果我理解你想要,这是我的解决方案:
var txt001 = "102".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
var txt002 = "1,03".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
var txt003 = "1.03".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
var txt004 = "004".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
var txt005 = "05".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
var txt006 = "06+07".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
var txt007 = "08/09".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
var txt008 = "010,10,01".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
var txt009 = "00,01".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
var txt010 = "0001".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
var txt011 = "01*01".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
var txt012 = "010,0".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
var txt013 = "0,0000001".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
var txt014 = "5/0".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
结果
102
1,03
1.03
4
5
6+7
8/9
10,10,01
0,01
1
1*1
10,0
0,0000001
5/0