用于在字符串中替换小数后的无效零的正则表达式模式

时间:2015-09-04 09:47:07

标签: javascript regex

我需要一个正则表达式,它替换字符串0之后的所有零.,并且后面没有任何数字0-9。例如

$2,305.690 ---> $2,305.6920,345.690000 % ---> 20,345.69 %345.609## ---> 345.609##23.000 - > 230.00 - > 0

我尝试了这个(/(?<=\..*)0(?=.*[^0-9].*)/g, '')但它抛出异常,可能是因为JavaScript不支持Lookbehinds。

请建议使用JS正则表达式解决方案。

4 个答案:

答案 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)

您可以使用

(\.[0-9]+)0+(\D+)

这将捕获十进制值,其余字符包括0,只需使用$1$2替换即可完成

Regex

答案 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);