我尝试使用正则表达式在Javascript中格式化数字,其中数字是公式的一部分。例如,给定12345.6789+9876.54321*-100
,结果应为12,345.6789+9,876.54321*-100
。
这是我的尝试:
str.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,")
结果:
12345.6,789+9876.54,321*-100
它在小数位(PLUNK)插入逗号,如何解决这个问题?
答案 0 :(得分:2)
我目前的感觉是,使用单一的RegExp是不可能的,但我仍然希望有人找到方法。我怀疑它需要支持lookbehind。
到目前为止,我最好的尝试需要嵌套替换,所以它肯定是作弊:
while read -r name value; do
declare "$name=$value"
done < <(jq -r 'to_entries[] | "\(.key) \(.value)"' arguments.json)
&#13;
外部RegExp抓取每个数字的整数部分(也可能是它之前的字符,但不会造成伤害),内部替换以类似于OP的方式插入逗号。
答案 1 :(得分:0)
不幸的是,JavaScript不支持 lookbehind 语法(?<=)
,因此您必须执行一些基本的解析来处理此任务。许多简单的解决方案之一可能是:
var formatNum = function(s) {
var r = "", m = s.match(/(?:^|\+|-|\*-?|\/|\.)(\d+)/g);
for (var i=0; i<m.length; i++)
r += m[i][0] != "."
? m[i].replace(/\B(?=(\d{3})+(?!\d))/g, ",")
: m[i];
return r
};
// test
console.log (formatNum("12345.6789+9876.54321*-100"));
console.log (formatNum("1000000000000.123456*-74300.0039/438372323.12312312"));
通过这种方式,您可以使用非常大的数字,仅在整数部分中以逗号分隔数千个。