javascript - 简单算术表达式的正则表达式
问题描述
我已经阅读了有关简单算术表达式正则表达式的其他 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'
,我不知道为什么?
解决方案
您只能得到 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 次以上以匹配至少一个+
或-
$
字符串结束
推荐阅读
- python - 为什么如果命令没有语法错误,它会评估什么结果?
- java - 是否可以在移动仿真中使用 Edge?
- android - 使用 AWS Amplify Storage SDK 显示文件上传/下载的进度
- python - HTML 电子邮件在浏览器和 gmail 应用程序中运行良好,但在本机 iphone 电子邮件客户端中无法正常工作
- css - Safari 轮廓颜色
- bash - 如何使用 for 循环(或不使用)在“borg create”命令中使用键和值
- windows - cmake add_custom_target 在使用命令完成之前不会打印到 Windows 上的标准输出
- spring - 当我遇到死锁时,可能是 tomcat 9.0.26 中的错误
- javascript - 如何找到最后一个没有文本值的表格单元格并输入消息?
- json - 如何自定义 GET 返回的内容