提问者:小点点

用于匹配具有可选十进制数字的数字的正则表达式[重复]


我试图从使用正则表达式的推文中提取评级。例如下面的推文,我想得到用户评分(9.75)和最高评分(10)。

This is Logan, the Chow who lived. He solemnly swears he's up to lots of good. 9.75/10

我使用了下面的正则表达式,但是捕获组1和2的结果是75和10。我不知道为什么只有在十进制组之后才捕获用户评级。

.*(\d+\.?\d+)\/(\d*\.?\d*)

共2个答案

匿名用户

如果您希望两个数字都有可选的小数,您应该将匹配的1或ore和匹配的0或更多*放在正确的位置,在那里它们匹配强制性的前导数字,然后是可选的小数

(\d+\.?\d+)\/(\d*\.?\d*)

具有

(\d+\.?\d*)\/(\d+\.?\d*)

这将匹配至少一个数字,然后可能是一个点,然后可能是更多的数字。

实时链接:https://regex101.com/r/qc5Zwz/1

匿名用户

\b(\d+(?:\.\d+)?)\/(\d+)\b
  • \b-期望单词边界(例如,空格,非字母字符)
  • -开始捕获评级
  • \d-整数部分
  • <代码>(?:\.\d)?-包装小数部分,不要将其捕获为一个组;使其可选
  • -结束'评级'捕获组
  • \/-期待一个正斜杠
  • (\d)-捕获最大值
  • \b-再次期待单词边界
const text = 'This is Logan, the Chow who lived. He solemnly swears he\'s up to lots of good. 9.75/10'
const pattern = /\b(\d+(?:\.\d+)?)\/(\d+)\b/
console.log(text.match(pattern))