我需要格式化我的数字,我正在使用正则表达式/(?=(?!^)(?:\ d {3})+ $)/ g,在必要时替换和插入。但目前我有一个负数{3} 000号的问题,所以在减号后添加逗号。
我做错了什么?
'-200'.replace(/(?=(?!^)(?:\d{3})+$)/g, ',')
returns: -,200
correct: -200
'-2000'.replace(/(?=(?!^)(?:\d{3})+$)/g, ',')
returns: -2,000
correct: -2,000

答案 0 :(得分:1)
我建议您将^
替换为\b
(?=(?!\b)(?:\d{3})+$)
(?!^)
断言我们不仅仅是开始,但是(?!\b)
断言我们不在单词char和非单词字符之间(反之亦然 )。
示例:强>
alert('-200'.replace(/(?=(?!\b)(?:\d{3})+$)/g, ','))
alert('-2000'.replace(/(?=(?!\b)(?:\d{3})+$)/g, ','))
答案 1 :(得分:1)
您可以使用此正则表达式:
var num = '-2000';
var repl = num.replace(/(\d)(?=(?:\d{3})+$)/m, '$1,');
或
var repl = num.replace(/(?=(?:\B\d{3})+$)/m, ',');
答案 2 :(得分:0)
要处理已签名的号码,我建议使用除正则表达式之外的其他内容
function formatInteger(num) {
var str = ('' + num).split('.')[0];
var sign = (str.charAt(0) === '-') && '-' || '';
if (sign) {
str = str.substr(1);
}
return sign + str.split('').reduceRight(function (result, char) {
if (result.length % 4 === 0) {
char += ',';
}
return char + result;
}, '').slice(0, -1);
}
如果您将此函数提供给浮点数,它将被截断。
formatInteger(123456.123); // "123,456"
formatInteger(-1594504924) // "-1,594,504,924"
答案 3 :(得分:0)
另一种方式:
var nb = '-2000000';
nb = nb.split(/\B/).reduce(function(p, c, i, a) {
return p + ((a.length-i)%3 ? c : ',' + c);
});