2015-08-18 46 views
2

我正在使用以下正则表达式在JavaScript中插入逗号到数字。Regex积极lookahead千位分隔符不会马赫数点后

(\d)(?=(\d{3})+(?!\d)) 

它工作得很好,但是整数与小数工作时失败的情况下比如10000.001223456(结果是1,234,568.0,000,454,554)

会发生什么的正则表达式后向前看“”找到匹配与替换它,

Example here

我试图补救by adding negative lookbehind没有运气,

((\d)(?=(\d{3})+(?!\d))(?<!\.)) 
因为

''可以位于任何位置,我不能使用*+

如何使某个特定符号(在此特定情况下'。'之后)后不匹配的正则表达式?

+0

而不是使用向后看/转发你应该明确地说,你让什么的。你可以在组中使用'+'和'*',例如:'\ d {1-3}(?:, \ d {3})+?(?:\。\ d +)?' –

回答

2

只能在3个步骤实现这一目标:

  1. 拆分成整数和小数部分
  2. 数修改的整数部分
  3. 加入。

在JS中没有可变宽度的后视,在这里很方便。

var s = ".12345680000454554"; 
 
//Beforehand, perhaps, it is a good idea to check if the number has a decimal part 
 
if (s.indexOf(".") > -1) { 
 
    var splts = s.split("."); 
 
    //alert(splts); 
 
    splts[0] = splts[0].replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,'); 
 
    //alert(splts[0]); 
 
    s = splts.join("."); 
 
    alert(s); 
 
    } 
 
else 
 
    { 
 
    alert(s.replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,')); 
 
    }