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

时间:2015-11-16 08:49:05

标签: javascript regex

我们有一些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并不支持。

痛苦地说,我们的正则表达式知识在这里结束了:(谷歌并不喜欢我们。

任何可以帮助我们的人?

2 个答案:

答案 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)

测试live on regex101.com

答案 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