Javascript 过滤报告中的逻辑

Javascript 过滤报告中的逻辑,javascript,python,filter,logic,Javascript,Python,Filter,Logic,这种过滤逻辑:(1和2)或3 可以用Python或Javascript实现,有什么想法吗?我在谷歌上什么也没找到。 我的意思是,用户将在textarea中键入filter,需要检查filter的语法(使用regex的mb)并解析filter。 有效和无效筛选器的示例: 1 or 2 : valid (1 and 3) or 2 : valid (1 or 2 and ) 3 : invalid 1 and 2 (or 3) : valid 1 (2 and 3) : invalid 有什么办法

这种过滤逻辑:
(1和2)或3
可以用Python或Javascript实现,有什么想法吗?我在谷歌上什么也没找到。 我的意思是,用户将在textarea中键入filter,需要检查filter的语法(使用regex的mb)并解析filter。 有效和无效筛选器的示例:

1 or 2 : valid
(1 and 3) or 2 : valid
(1 or 2 and ) 3 : invalid
1 and 2 (or 3) : valid
1 (2 and 3) : invalid

有什么办法吗?

AFAIK,因为布尔表达式可以有多个嵌套级别-这不是一种常规语言,因此如果不对输入施加一些约束,就不可能为此创建正则表达式

在python中,我将使用
eval
来实现这一点。如果语法不正确,将引发异常。正如在评论中提到的,考虑到这在安全方面是有风险的,所以我将首先检查输入文本以避免注入。参见一些示例:

In [11]: eval('1 or 2')
Out[11]: 1

In [12]: eval('1 (2 and 3)')
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-12-96e407050456> in <module>()
----> 1 eval('1 (2 and 3)')

<string> in <module>()

TypeError: 'int' object is not callable

In [13]: eval('1 and 2 (or 3)')
  File "<string>", line 1
    1 and 2 (or 3)
              ^
SyntaxError: invalid syntax


In [14]: eval('(1 and 3) or 2')
Out[14]: 3
[11]中的
:eval('1或2')
Out[11]:1
在[12]中:eval('1(2和3)'
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
---->1评估('1(2和3)'
在()
TypeError:“int”对象不可调用
在[13]中:eval('1和2(或3)'
文件“”,第1行
1和2(或3)
^
SyntaxError:无效语法
[14]中:eval(‘(1和3)或2’)
Out[14]:3

我只想指出,将用户输入的文本作为Python命令进行计算是多么不明智。