3 回答
TA贡献1818条经验 获得超11个赞
您可以使用正则表达式查找所有具有小数位的数字,然后用于Array.prototype.reduce
查找小数位数最多的数字。
const input = '0.1+1+2.2423+2.1';
const maxNumberOfDecimalPlaces = input
.match(/((?<=\.)\d+)/g)
?.reduce((acc, el) =>
acc >= el.length ?
acc :
el.length, 0) ?? 0;
console.log(maxNumberOfDecimalPlaces);
0请注意,当在字符串中找不到带小数位的数字时,这将返回。
TA贡献1801条经验 获得超8个赞
您可以执行以下操作:
Array.prototype.split()
/\[^\d.\]+/
通过 RegExp提取数字的输入字符串遍历生成的数字数组,并
Array.prototype.map()
用小数分隔符将它们拆分为whole
和fractional
部分,返回length
小数部分或 0(对于整数)用于
Math.max()
查找最大值length
上面的方法似乎更健壮,因为它不涉及某些不受支持的特性:
RegExp lookbehinds assertions (
/(?<=)/
)某些流行的浏览器可能不支持,如 Safari 或 Firefox(低于当前版本)最新功能,如条件链接 (
.?
)或nulish 合并 (??
)
const src = ['3*2.2', '6+3.1*3.21', '(1+2)*3' , '1+(1.22+3)', '0.1+1+2.2423+2.1'],
maxDecimals = s =>
Math.max(
...s
.split(/[^\d.]+/)
.map(n => {
const [whole, fract] = n.split('.')
return fract ? fract.length : 0
})
)
src.forEach(s => console.log(`Input: ${s}, result: ${maxDecimals(s)}`))
.as-console-wrapper{min-height:100%;}
TA贡献1841条经验 获得超3个赞
您可以使用正则表达式模式
var str="6+3.1*3.21"
d=str.match(/(?<=\d)[.]\d{1,}/g)
d!=null ? res=d.map((n,i) => ({["number" + (i+1) ] : n.length - 1}))
: res = 0
console.log(res)
添加回答
举报