首页 > 解决方案 > 简单算术表达式的正则表达式

问题描述

我已经阅读了有关简单算术表达式正则表达式的其他 stackoverflow 帖子,但它们都没有解决我的问题:

我需要验证这种表达式:"12+5.6-3.51-1.06"

我试过了

const mathre = /(\d+(.)?\d*)([+-])?(\d+(.)?\d*)*/;
console.log("12+5.6-3.51-1.06".match(mathre));

但结果是'12+5',我不知道为什么?

标签: javascriptregex

解决方案


您只能得到 12.5 作为匹配项,因为没有/g全局标志,但是如果您启用全局标志,它将提供部分匹配,因为没有锚点^并且$在验证整个字符串的模式中。

仅匹配一次,[+-]应重复匹配多次。

目前该模式将匹配1+2+3,但它也将匹配1a1+2b2,因为点未转义并且可以匹配任何字符(用于\.逐字匹配)。

以数字和可选的小数部分开头并重复 1 次或多次 a+-

^\d+(?:\.\d+)?(?:[-+]\d+(?:\.\d+)?)+$

正则表达式演示

如果值可以以可选的加号和减号开头,也可以是不带前导数字的小数:

^[+-]?\d*\.?\d+(?:[-+][+-]?\d*\.?\d+)+$
  • ^字符串的开始
  • [+-]?可选+-
  • \d*\.\d+将 *+ 数字与可选.数字和 1+ 数字匹配
  • (?:非捕获组
    • [-+]匹配一个+-
    • [+-]?\d*\.\d+匹配可选的+-0+ 位和可选的.和 1+ 位
  • )+关闭非捕获组并重复 1 次以上以匹配至少一个+-
  • $字符串结束

正则表达式演示


推荐阅读