使用正则表达式从字符串中删除第一个零值

时间:2017-02-08 07:53:27

标签: regex

我使用padStart方法(padLeft)创建了一个字符串值,例如:

"5".padStart(19, "0")

导致" 0000000000000000005" 如何使用正则表达式获得5回复? 我测试了这个:

/^0*(\d+)$/.exec(d)[1]

正确返回5.

但是这个正则表达式返回null,例如" 00000012.22"

样品:

5> 5

<00> 005&gt; 5

0011.22&gt; 11.22&gt;&gt;这是第一个问题!

00100&gt;&gt; 100

001001&gt;&gt; 1001

00.5&gt;&gt; 0.5 这是第二个问题!

工作代码,但没有正则表达式:

function toDb(d) {
        if (d == null) return null;
        var precisionIndex = d.indexOf('.');
        return d.toString().padStart((29 + precisionIndex + 1), '0');
        }

function fromDb(d) {
            if (d == null) return null;
            d = d.replace(/^0+/, ''); // I'd like to use regex here
            if (d.indexOf('.') == 0) // I'd like to use regex here
                d = '0' + d; // I'd like to use regex here
            return d;
    }

fromDb(toDb(&#39; 0.5&#39;))为我返回0.5。但是我想在我的代码中使用正则表达式。

1 个答案:

答案 0 :(得分:3)

使用String#replace方法替换前导0

console.log(
  "0000000000000000005".replace(/^0+(?=\d)/, '')
)

console.log(
  "000000000000000000.5".replace(/^0+(?=\d)/, '')
)

在正则表达式start anchor(^)断言字符串的开头位置,0+匹配0的组合one or more repetition^0+匹配0在开始时。

更新:为避免在0使用positive look ahead assertion之前删除.(?=\d)0匹配跟着一个数字。