我需要一个正则表达式,它替换字符串0
之后的所有零.
,并且后面没有任何数字0-9
。例如
$2,305.690
---> $2,305.69
,20,345.690000 %
---> 20,345.69 %
,345.609##
---> 345.609##
,23.000
- > 23
,0.00
- > 0
我尝试了这个(/(?<=\..*)0(?=.*[^0-9].*)/g, '')
但它抛出异常,可能是因为JavaScript不支持Lookbehinds。
请建议使用JS正则表达式解决方案。
答案 0 :(得分:1)
您可以使用
\.(\d*?)0+(\D*)$
如果组1的长度大于0,则替换为.$1$2
,否则替换为$1$2
。它可以在回调函数中完成(见下文)。
正则表达式匹配:
\.
- 小数点分隔符(文字.
)(\d*?)
- 0位或更多位(捕获的组1 - 分隔符后的所有数字,最后为尾随零),尽可能少0+
- 1个或多个零...... (\D*)
- 后跟0个或更多个非数字(捕获的组2)...... $
- 在字符串结束之前(或多行模式中的行)
var re = /\.(\d*?)0+(\D*)$/gm;
var str = '$2,305.690\n ---> $2,305.69, \n20,345.690 %\n ---> 20,345.69 %, \n345.609##\n ---> 345.609##\n$2,305.000000\n --> $2,305\n0.000\n ---> 0';
var result = str.replace(re, function(m, grp1, grp2) {
return (grp1.length > 0 ? "." : "") + grp1 + grp2;
});
document.write(result.replace(/\n/g, '<br/>'));
答案 1 :(得分:1)
答案 2 :(得分:0)
您可以使用以下正则表达式。
(\.\d*?[1-9]*)(0+)(\s*%?)$
以下是如何使用它的示例:
var number = '$2,305.69000';
number = number.replace(/(\.\d*?[1-9]*)(0+)(\s*%?)$/,'$1$3');
alert(number); //shows $2,305.69
答案 3 :(得分:0)
不是一个好主意可能但是会做的工作
var num = '200.00900';
if (num.match(/[.]\d+/)) {//~num.indexOf('.') will fail when num will be '200.'
num = num.replace(/0+\b/g, '');
}
console.log(num);