【发布时间】:2021-01-21 01:27:31
【问题描述】:
我想从字符串中创建条件语句,包括括号、AND 和 OR。
所以我从stackoverflow中找到了用括号分割字符串的代码。
let array = [],
c = 0;
'(A OR B) AND C'.split(/([()])/).filter(Boolean).forEach(e =>
e == '(' ? c++ : e == ')' ? c-- : c > 0 ? array.push('(' + e + ')') : array.push(e)
);
let finalQuery = [];
while (array.length > 0) {
const condition = array.pop();
// console.log(condition)
if (condition.includes("OR")) {
let temp = condition.trim().split(" OR ");
temp.map(each => {
finalQuery.push(each);
})
} else if (condition.includes("AND")) {
let temp = condition.trim();
if (temp.includes("AND")) {
if (temp.indexOf("AND") == 0) {
if (finalQuery.length > 0) {
finalQuery = finalQuery.map(x => x + " " + temp.replace("AND", ""))
}
} else if (temp.indexOf("AND") == temp.length - 3) {
if (finalQuery.length > 0) {
finalQuery = finalQuery.map(x => temp.replace("AND", "") + ' ' + x)
}
}
}
}
console.log(finalQuery)
}
我试过上面的代码。
但它不起作用。
我想要如下结果。
输入:(A OR B) AND (C OR D)
输出:A C OR A D OR B C OR B D
输入:(A OR B) AND (C OR D) AND (E OR F)
输出:A C E OR A C F OR A D E OR A D F OR B C E OR B C F OR B D E OR B D F
谁能帮帮我?
【问题讨论】:
-
请从给定的字符串中添加想要的结果。
-
对不起,我在上面加了。
-
您必须在代码中包含某种形式的递归。例如:在完成
while()循环之前,检查finalQuery是否仍然包含括号中的项目。如果是这样,请从中删除所有内容并将其推回array。然后while()测试将看到array仍然有内容并且会继续循环。 -
您基本上是在为特定领域的语言编写解释器。如果您愿意(我会推荐它),您可以编写自己的解释器。包含语法/AST、解析器/标记器和运行时。一个快速的谷歌搜索得到了我this,这似乎是一个很好的指南。或者你可以直接去经典阅读"Build Your Own Lisp"
-
我有一个关于输入格式的问题。作为
condition = X AND/OR Y,输入是否只有像(condition) AND/OR (condition) AND/OR ...这样的带括号的?
标签: javascript algorithm conditional-statements where-clause parentheses