使用正则表达式从公式中删除逗号

时间:2017-09-13 01:42:26

标签: javascript regex

我尝试使用正则表达式在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)插入逗号,如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

我目前的感觉是,使用单一的RegExp是不可能的,但我仍然希望有人找到方法。我怀疑它需要支持lookbehind。

到目前为止,我最好的尝试需要嵌套替换,所以它肯定是作弊:



while read -r name value; do
    declare "$name=$value"
done < <(jq -r 'to_entries[] | "\(.key) \(.value)"' arguments.json)
&#13;
&#13;
&#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"));

通过这种方式,您可以使用非常大的数字,仅在整数部分中以逗号分隔数千个。