我使用padStart方法(padLeft)创建了一个字符串值,例如:
"5".padStart(19, "0")
导致" 0000000000000000005" 如何使用正则表达式获得5回复? 我测试了这个:
/^0*(\d+)$/.exec(d)[1]
正确返回5.
但是这个正则表达式返回null,例如" 00000012.22"
样品:
5> 5
<00> 005&gt; 50011.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。但是我想在我的代码中使用正则表达式。
答案 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
匹配跟着一个数字。