首页 > 解决方案 > 正则表达式匹配,只要它出现在可选字符之前

问题描述

我目前有正则表达式/\B(?=(\d{3})+(?!\d))/g,但我只希望它在.iff.存在之前匹配。

换句话说12345可以匹配。但是12345.6789之后不能有比赛.

一个简单的解决方法是让if else块分解案例,但我希望它在一个正则表达式中


更多详情

我正在使用 javascript 并制作一个正则表达式来帮助我格式化数字。具体来说,这个正则表达式会将逗号插入数字中。

目前,此代码的工作方式如下:

function formatter(myNum) {
   return myNum.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}

输入 1:12345.6789
输出 1:12,345.6,789
所需输出 1:12,345.6789

输入 2:12345
所需输出 2:12,345.6789

希望这可以消除任何混乱。

  1. 我希望它在没有时匹配.
  2. 如果它确实有.它应该能够匹配之前
  3. 我可以做一个简单的解决方法,但似乎正则表达式应该很容易处理这个问题?

标签: regex

解决方案


如果您可以对量词(现代 JS 引擎)使用负后视:

function formatter(myNum) {
   return myNum.replace(/(?<!\.\d+)\B(?=(\d{3})+(?!\d))/g, ',');
}

console.log(formatter('1234512345'));
console.log(formatter('1234512345.1234512345'));

查看兼容性:


推荐阅读