2017-09-13 3 views
0

数が数式の一部である正規表現を使用して、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

@JaromandaX問題はカンマではなく、小数点を示す '.'の後に表示され、望ましい動作ではありません。 –

+0

nevermind、私は問題を再読した:p私は人々が結果が何であるかを示すことを望む! –

+0

regexを使用する必要がない場合、[this](https://stackoverflow.com/questions/149055/how-can-i-format-numbers-as-dollars-currency-string-in-javascript)は次のとおりです。あなたが探しているもの –

答えて

2

私の現在の気持ちは、これは単一のRegExpでは不可能だと思っていますが、私はまだ誰かが道を見つけることを期待しています。私はそれがlookbehindのためのサポートを必要とするだろうと思う。

// Test cases 
 
[ 
 
    '1', 
 
    '12', 
 
    '123', 
 
    '1234', 
 
    '12345', 
 
    '123456', 
 
    '1234567', 
 
    '12345678', 
 
    '123456789', 
 
    '1234567890', 
 
    
 
    '1.23', 
 
    '1.234', 
 
    '1.2345', 
 
    '1.234567890', 
 
    
 
    '1234567890.1234567890', 
 
    
 
    '1+2-3+4', 
 
    '12+34-56+78', 
 
    '123+456-789', 
 
    
 
    '1234+5678', 
 
    '12345-678', 
 
    '1234567-8', 
 
    
 
    '-123456.7890', 
 
    '1+2-3456.7890', 
 
    '1+2-3456.7890+123456789-0.1234' 
 
    
 
].forEach(function(str) { 
 
    var out = str.replace(/(?:^|[^\.\d])\d+/g, function(match) { 
 
     return match.replace(/(\d)(?=(\d\d\d)+$)/g, '$1,'); 
 
    }); 
 
    
 
    console.log(out); 
 
});

外側の正規表現は、あまりにもそれの前に、各数値の整数部分(おそらく文字をつかむ:私の最高の試みはこれまでのところ、それは間違いなく不正行為ですので、交換する入れ子にする必要が

それは傷つくことはありません)、内側の置換は、OPと同様の方法でカンマを挿入します。

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"));

この方法で、あなたは非常に大きな数字を使用し、整数部分のみで、カンマ区切りの何千ものを得ることができます。

関連する問題