javascript - 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/
是否可以仅使用正则表达式来实现?
谢谢
解决方案
尝试这个:
首先用您的小数分隔符替换所有点。然后将数千人分组。
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>
推荐阅读
- java - 无法将日期和时间转换为 LocalDateTime [Java]
- javascript - 如何在 React.JS 中添加搜索过滤器?
- python - 在其 __init__ 方法中引用类时出错
- haskell - Haskell 将 putStr 和 putStrLn 放在程序的末尾而不是在执行期间
- opencv - GrabCut 的 GPU 版本
- python - Pyinstaller 可执行文件在隐藏时不运行进程
- ruby-on-rails - Rails 使用destroy soft_destroy,如何更新deleted_by
- c++ - 为什么这个测试总是返回假?
- linux - 用awk中的其他字符替换字符串的子字符串
- jquery - 使用 jquery 淡出后切换可见性不起作用