js正则表达式,验证四则运算,并且公式中必须包含某个字符

TeamWei 2019-12-25 02:21:03
例如有两组数组:
['a1','a2','a3']
['b1','b2']
...

要求公式中至少包含第一组和第二组中的其中一个,比如:
(a1+b2)*10 返回true
b2/a3+7 返回true
a2-b1*(7+a2) 返回true

(b1+0.8)*10 返回false
(2-1)/5 返回false
a1+a2+c3 返回false

公式中除数组中的字符,只能用数字和加减乘除括号
...全文
454 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
天际的海浪 2019-12-26
  • 打赏
  • 举报
回复
引用 4 楼 TeamWei 的回复:
[quote=引用 3 楼 天际的海浪 的回复:]

var arr1 = ['a1','a2','a3'];
var arr2 = ['b1','b2'];
var str = "(a1+b2)*10";
alert(new RegExp("^(?=.*\\b("+arr1.join("|")+")\\b)(?=.*\\b("+arr2.join("|")+")\\b)((\\b("+arr1.join("|")+"|"+arr2.join("|")+")\\b)|[\\d\\.\\+\\-\\*\\\/\\(\\)])+$").test(str));
还是有点问题: +1+(4.41)b1+a1 返回true[/quote] 要验证算术表达式格式非常麻烦,尤其是括号嵌套配对,各浏览器中的正则都还不支持平衡组语法,只能用循环逐个字符统计。
TeamWei 2019-12-26
  • 打赏
  • 举报
回复
引用 3 楼 天际的海浪 的回复:

var arr1 = ['a1','a2','a3'];
var arr2 = ['b1','b2'];
var str = "(a1+b2)*10";
alert(new RegExp("^(?=.*\\b("+arr1.join("|")+")\\b)(?=.*\\b("+arr2.join("|")+")\\b)((\\b("+arr1.join("|")+"|"+arr2.join("|")+")\\b)|[\\d\\.\\+\\-\\*\\\/\\(\\)])+$").test(str));


还是有点问题:
+1+(4.41)b1+a1 返回true
天际的海浪 2019-12-26
  • 打赏
  • 举报
回复

var arr1 = ['a1','a2','a3'];
var arr2 = ['b1','b2'];
var str = "(a1+b2)*10";
alert(new RegExp("^(?=.*\\b("+arr1.join("|")+")\\b)(?=.*\\b("+arr2.join("|")+")\\b)((\\b("+arr1.join("|")+"|"+arr2.join("|")+")\\b)|[\\d\\.\\+\\-\\*\\\/\\(\\)])+$").test(str));
TeamWei 2019-12-26
  • 打赏
  • 举报
回复
引用 1 楼 風灬雲 的回复:
正则能取到变量的值? 你数组都不确定,正则能实现?


数组内容不用在意,当作是固定的内容就好了
風灬雲 2019-12-26
  • 打赏
  • 举报
回复
正则能取到变量的值? 你数组都不确定,正则能实现?

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧