评估在 JavaScript 中给出布尔表达式的字符串

ako*_*koy 6 javascript boolean-logic eval

我有一个包含布尔逻辑的字符串,例如:

var test = "(true)&&(false)&&!(true||true)"
Run Code Online (Sandbox Code Playgroud)

在这种情况下,在 JavaScript 中评估此字符串以获取 false 的布尔值的好方法是什么

  1. 我知道我们可以使用 eval() 或 new Function() .. - 但这是一种安全的方法吗?
  2. 我猜另一种选择是编写自定义解析器。作为一个对 JS 相当陌生的人,这需要很多努力吗?我找不到任何用于布尔逻辑表达式的解析器示例
  3. 还有其他选择吗?

lox*_*xxy 3

只要你能保证安全,我认为你可以使用eval。

也许在进行评估之前对其进行处理?

var test = "(true)&&(false)&&!(true||true)" 

var safe = test.replace(/true/ig, "1").replace(/false/ig, "0");

var match = safe.match(/[0-9&!|()]*/ig);

if(match) {
   var result = !!eval(match[0]);
}
Run Code Online (Sandbox Code Playgroud)

  • 如果[内容安全策略](https://developer.mozilla.org/en-US/docs/Web/Security/CSP) 已禁用代码评估,则无法使用。 (2认同)