用于在字符串中查找十进制数的正则表达式

Regular expression to find decimal numbers in a string

本文关键字:十进制数 正则表达式 查找 字符串 用于      更新时间:2023-09-26

我正在尝试搜索一个嵌入十进制数的字符串。该数字使用逗号表示(百千分隔符),使用句点表示十进制分隔符。

无效十进制数示例:

  • .33,.333(数字前面必须至少有一位数字,尽管为零)
  • 1,22,33.33,1,22.333(逗号分隔数字中的最后一段必须有3位数字)
  • .3,.3333(十进制数必须在小数后有2或3位数字)
  • ,0.33(小数不能以逗号开头)

有效十进制数示例:

  • 0.33&10.333
  • 1,22333.33&1222.333

特殊情况:如果字符串像"You a/c bal.33.33"。结果应该是33.33


我尝试了以下正则表达式:

 (((''d+'',)+''d{3})|([^,]''d+))''.''d{2,3}(?!''.''d)

它适用于所有情况,但当数字以逗号开头时会失败。

您可以将捕获组用作

/(?:[^'d,]|^)('d+(?:(?:,'d+)*,'d{3})?'.'d{2,3})'b/
  • 捕获组1,('d+(?:(?:,'d+)*,'d{3})?'.'d{2,3})'b将在字符串中包含十进制数。

  • (?:[^'d,]|^)确保捕获组正确捕获整个数字,而不是其中的一部分

Regex演示

测试

var str = "0.33";
var matches = str.match(/(?:[^'d,]|^)('d+(?:(?:,'d+)*,'d{3})?'.'d{2,3})'b/);
console.log(matches[1])
=> 0.33
var str = "You a/c bal.33.33"
var matches = str.match(/(?:[^'d,]|^)('d+(?:(?:,'d+)*,'d{3})?'.'d{2,3})'b/);
console.log(matches[1])
=> 33.33

只需尝试以下正则表达式:

^'d+((,'d+)*,'d{3})?'.'d{2,3}$

演示