如果字符串包含超过 2 个小数,则用于替换字符串的 RegEx

cbd*_*per 3 javascript regex replace regex-group regex-lookarounds

我有这个用户价格输入,我想允许 0、1 或 2 个十进制数字。

  • 我使用逗号表示小数。
  • 我不使用也不允许千位分隔符。

题:

如果用户输入第三个十进制数字,我想替换输入。

类似于:

  • 5 还行吧
  • 5, 没关系,因为它在等待小数
  • 5,5 还行吧
  • 5,55 还行吧
  • 5,555 这不行,我想删除最后一位数字并返回 5,55
  • 5,555555555555 这也不行,用户可能会粘贴一些带有额外十进制数字的内容,我想将它们最多减少到 2 位小数,然后再次返回 5,55

我怎样才能做到这一点?

我知道如何匹配字符串的结尾: /[,\d+]$/

但是如何用逗号后的前两位数字替换?

The*_*ird 8

您的模式[,\d+]$将匹配逗号、数字或加号并断言字符串的结尾。

您可以在一组中捕获 1+ 位数字、一个可选的逗号和 0-2 位数字。然后匹配 0+ 位数字并替换为第 1 组。

^(\d+,?\d{0,2})\d*$
Run Code Online (Sandbox Code Playgroud)

解释

  • ^ 开始严格
  • ( 捕获组 1
    • \d+ 1+ 位数
    • ,? 可选逗号
    • \d{0,2} 0 - 2 位数字
  • ) 关闭群组
  • \d* 匹配 0+ 位数字
  • $ 断言字符串结束

正则表达式演示

如果要保留小数点之前的部分,可以使用捕获组^(\d+),?\d{0,2}$并替换为第一个捕获组: