JavaScript中的正则表达式自定义单词边界

5

我们有一些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上线)
这个正则表达式可以工作,但不能处理包括逗号或小数点在内的数字。因为这被视为单词边界,导致0也被移除了。
我们找到了一种使用负回顾 / 前瞻的解决方案,但JS不支持此操作。
很遗憾,我们的正则表达式知识到此结束 :( 而且google也不能帮助我们。
有人能帮助我们吗?

你认为这个对你有用吗?https://regex101.com/r/mL3jS8/2。我设置了一个全局标志,还去掉了任何前导零或逗号。如果你想的话,也可以在方括号中包含一个点。 - KodeFor.Me
@MerianosNikos 这不是相同的结果吗? - Marcos Pérez Gude
2个回答

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)

regex101.com上进行测试。


谢谢你的解决方案! - Bjorn H

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接