首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何计算Javascript格式的字符串(以及,true,false,(OR,true,false,false,AND,false,true))?

如何计算Javascript格式的字符串(以及,true,false,(OR,true,false,false,AND,false,true))?
EN

Stack Overflow用户
提问于 2020-08-26 09:33:30
回答 3查看 314关注 0票数 0

例如,我有一个格式为(AND, true, false, (OR, true, false, false, (AND, false, true)))的字符串,在JavaScript中有一种方法可以将这个字符串计算成一个布尔值吗?

代码语言:javascript
运行
AI代码解释
复制
expression 1: (AND, true, false) => false

expression 2: (AND, true, (OR, false, true)) will evaluate to => (AND, true, true) => true

像这样,我们可以有一个带有嵌套条件的表达式。

任何解决这个问题的解决方案都会有很大的帮助。提前感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-08-26 09:40:35

一种选择是使用正则表达式来匹配不包含任何嵌套括号的(OR ...(AND序列,并将其替换为适当的解析值。递归地执行此操作,直到字符串中只有一个项:

代码语言:javascript
运行
AI代码解释
复制
const parse = (input) => {
  while (input.includes(' ')) {
    input = input.replace(
      /\((AND|OR)([^()]+)\)/g,
      (_, type, restOfBlock) => {
        // Words will become an array of the words present here, eg ['true', 'false']
        const words = restOfBlock.match(/\w+/g);
        if (type === 'OR') return words.includes('true');
        return !words.includes('false');
      }
    );
  }
  return input === 'true';
};

console.log(parse(`(AND, true, false, (OR, true, false, false, (AND, false, true)))`)); // expression 0
console.log(parse(`(AND, true, false)`)); // expression 1
console.log(parse(`(AND, true, (OR, false, true))`)); // expression 2

票数 0
EN

Stack Overflow用户

发布于 2020-08-26 09:40:44

如果您试图编写代码来计算任何(格式良好的)表达式,就像您给出的示例一样,那么您就需要为您的语言编写一个解析器。

退一步:您的示例似乎是用于表示逻辑表达式的语言的示例。它看起来像一个“自定义”的语言,所以它不太可能你会找到一个现成的解决方案,但它不太难创建自己的。

我建议调查一下PEG.js。这个包是一个解析器生成器:您给它一个描述语言的文件,它将生成Javascript代码来解析它。

票数 0
EN

Stack Overflow用户

发布于 2020-08-26 09:47:54

您可以替换一些部件以获得可计算的字符串。

代码语言:javascript
运行
AI代码解释
复制
function evaluate(string) {
    const
        AND = (...args) => args.every(Boolean),
        OR = (...args) => args.some(Boolean);
    return eval(string.replace(/\(([^,]+),\s*/g, '$1('));
}


console.log(evaluate('(AND, true, true)'));

console.log(evaluate('(AND, true, false, (OR, true, false, false, (AND, false, true)))'));

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63602908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档