首页 > 解决方案 > Javascript regex 格式价格,2 例

问题描述

我有 2 种价格格式案例,我被正则表达式卡住了,我找不到任何解决方法。

我的正则表达式格式化价格:/(\d)(\d{3})(\.)/g

情况1:

var price             = '1000000.0000';
var decimals          = 2;
var thousandSeparator = ',';
var decimalSeparator  = '.';
var formatedPrice     = price.replace(/(\d)(\d{3})(\.)/g, '$1' + thousandSeparator + '$2' + decimalSeparator + '');
document.querySelector( '#case_1 span' ).innerHTML = formatedPrice;

结果:1000,000.0000

预期的:1,000,000.0000

案例二:

var price             = '1000000.0000';
var decimals          = 2;
var thousandSeparator = '.';
var decimalSeparator  = ',';
var formatedPrice     = price.replace(/(\d)(\d{3})(\.)/g, '$1' + thousandSeparator + '$2' + decimalSeparator + '');
document.querySelector( '#case_2 span' ).innerHTML = formatedPrice;

结果:1000.000,0000

预期的:1.000.000,0000

JsFiddle:https ://jsfiddle.net/cpan2s6d/


是否可以仅使用正则表达式来实现?

谢谢

标签: javascriptjqueryregex

解决方案


尝试这个:

首先用您的小数分隔符替换所有点。然后将数千人分组。

price.replace(".", decimalSeparator).replace(/\B(?=(\d{3})+(?!\d))/g, thousandSeparator);

代码:

var price = '1000000.00';
var decimals = 2;
var thousandSeparator = ',';
var decimalSeparator = '.';
var formatedPrice = price.replace(".", decimalSeparator).replace(/\B(?=(\d{3})+(?!\d))/g, thousandSeparator);

document.querySelector('#case_1 span').innerHTML = formatedPrice;

var price = '1000000.00';
var decimals = 2;
var thousandSeparator = '.';
var decimalSeparator = ',';
var formatedPrice = price.replace(".", decimalSeparator).replace(/\B(?=(\d{3})+(?!\d))/g, thousandSeparator);

document.querySelector('#case_2 span').innerHTML = formatedPrice
  <div id="case_1">Case 1: <span></span></div>
  <div id="case_2">Case 2: <span></span></div>


推荐阅读