我知道从字符串中删除前导零的方法:
'000100'.replace(/^0+/, '')
字符串
但是如果一个浮点型字符串(如'00100.2300'或'00100'),如何从它里面去掉所有多余的零呢?
'00100.2300' => '100.23'
'00100' => '100'
'00100.0023' => '100.0023'
'100.00' => '100.' or '100' will better
'-100.002300' => '-100.0023'
'0.50' => '0.5'
型
假设字符串:
- 仅包含数字或点号或负号'-',不包含字符及其他。
- 小数点不会出现在字串的第一个,而且最多一个。
- 负号“-”将出现在正常位置。“-”前后没有多余的零。
- 字符串表示的浮点数可能大于
Number.MAX_SAFE_INTEGER
- 正负浮动都是可能的。
用于过滤多余零的函数可能相对容易,而且步骤也更多。
而正则表达式会更简单。
7条答案
按热度按时间7cjasjjr1#
Regex:
字符串
Live demo
细分:
^0+(?!\.)
匹配不符合小数点的前导零|
或(?:
非捕获组的开始\.
匹配小数点|
或(\..*?)
捕获小数点前的数字)
NCG结束0*$
匹配尾随零JS代码:
型
v440hwme2#
在我看来,您可以执行一次查找和替换操作来完成
一切.
这样,您可以一次匹配整个 valid 数字,从而可以
在一个字符串中修复多个数字(如果全局执行)。
如果您的字串包含单一数字,也会有相同的效果。
查找
(?:(-)(?![0.]+(?![\d.]))|-)?\d*?([1-9]\d*|0)(?:(?:(\.\d*[1-9])|\.)\d*)?(?![\d.])
替换
$1$2$3
JS演示:https://regex101.com/r/H44t6z/1
可读/信息版本
字符串
s4n0splo3#
你可以尝试一个原生方法:
字符串
然后你可以用任何你想要的方法把它转换回字符串。
lg40wkob4#
你可以使用
^0+
来捕获前导零,(\.\d*[1-9])(0+)$
来捕获尾随零。所以你的正则表达式应该是:/^0+|(\.\d*[1-9])(0+)$/g
字符串
d4so4syb5#
即使传递了字符串
100
,这个答案也可以解决任务:字符串
100.0023
型
100
tkqqtvp16#
在这里使用JS类型强制转换可能是一个好主意。
字符串
q43xntqr7#
我有一个字符串类型的浮点数,为了比较来自两个不同来源的数据,我只需要从数字中删除尾随的零。
使用正则表达式似乎更容易出错,使用一个简单的while循环检查最后一个字符是否为零对我来说似乎是一次性脚本的一个足够的检查。
字符串