我正在尝试使用正则表达式从一条推文中提取评级。例如下面的tweet,我想获得用户评分(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*)
答案 0 :(得分:2)
如果您希望两个数字都具有可选的小数,则应将匹配的一个或矿石+
和匹配的零个或多个*
放在正确的位置,在该位置它们与强制性的前导数字匹配,可选的小数点
(\d+\.?\d+)\/(\d*\.?\d*)
使用
(\d+\.?\d*)\/(\d+\.?\d*)
这将匹配至少一个数字,然后匹配一个点,然后再匹配另一个数字。
答案 1 :(得分:2)
\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))