-
慕尼黑8549860
您可以使用正则表达式查找所有具有小数位的数字,然后用于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请注意,当在字符串中找不到带小数位的数字时,这将返回。
-
蝴蝶刀刀
您可以执行以下操作: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%;}
-
偶然的你
您可以使用正则表达式模式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 = 0console.log(res)