Javascript从括号中拆分,并使用和/或生成条件语句

Javascript从括号中拆分,并使用和/或生成条件语句,javascript,algorithm,conditional-statements,where-clause,parentheses,Javascript,Algorithm,Conditional Statements,Where Clause,Parentheses,我想从包含括号和或的字符串中生成条件语句 所以我从stackoverflow中找到了用括号分隔字符串的代码 let数组=[], c=0; “(A或B)和C”。拆分(/([()])/)。筛选(布尔)。forEach(e=> E==(‘,C++:e==’)??c::C>0?数组。Press(‘(+e++)’):数组。 ); 设finalQuery=[]; while(array.length>0){ const condition=array.pop(); //console.log(条件) 如果

我想从包含括号和或的字符串中生成条件语句

所以我从stackoverflow中找到了用括号分隔字符串的代码

let数组=[],
c=0;
“(A或B)和C”。拆分(/([()])/)。筛选(布尔)。forEach(e=>
E==(‘,C++:e==’)??c::C>0?数组。Press(‘(+e++)’):数组。
);
设finalQuery=[];
while(array.length>0){
const condition=array.pop();
//console.log(条件)
如果(条件包括(“或”)){
设温度=条件修剪().分割(“或”);
温度映射(每个=>{
finalQuery.push(每个);
})
}如果(条件包括(“和”)){
设温度=条件微调();
如果(温度包括(“和”)){
如果(温度指数(“和”)==0){
如果(finalQuery.length>0){
finalQuery=finalQuery.map(x=>x+“”+temp.replace(“AND“,”))
}
}else if(温度索引(“和”)==温度长度-3){
如果(finalQuery.length>0){
finalQuery=finalQuery.map(x=>temp.replace(“AND”,”)+“”+x)
}
}
}
}
console.log(finalQuery)

}
仅适用于
A和/或B和/或C…的格式

让我们假设

  • A是代币,B也是代币
  • 操作仅为
  • expression=token operator token
    -(一)

我对所有表达式求值,将其标记为字符串。我对此有一些规则:

  • A或B
    ->
    A、B
    (标记为字符串)
  • A和B
    ->
    AB
  • 然后,
    A、B和C可以计算为
    AC、BC

通过括号
解析并获取表达式,并对其求值

例如,
(A和B)或C
计算为
AB或C
,然后再次计算为
AB,C
。现在我们可以通过上面(1)计算所有表达式

这里是代码。试试看:

函数是{
返回s.indexOf('OR')!=-1 | | s.indexOf('AND')!=-1;
}
//将“exp oper exp”返回到评估的exp
功能评估{
//或操作
如果(s.indexOf('OR')!=-1){
var i=s.indexOf('或');
var first=s.slice(0,i-1);
var second=s.slice(i+3);
return[first,second].toString();//merge
}
//和操作
else if(s.indexOf('AND')!=-1){
var i=s.indexOf('和');
var first=s.slice(0,i-1).split(',');
var second=s.slice(i+4).split(',');
var结果=[];
对于(第一个的var f0){
用于(第二个的var s0){
结果:推送(f0+s0);
}
}
返回result.toString();
}
//错失
否则{
返回“”;
}
}
函数_计算{
变量l=-1,r=无穷大;
var标记=[];
var-opers=[];
而(l(v.split(“”).join(“”));/“ABC”=>“ABC”
返回lst.join('or');//在所有标记之间添加“or”
}
函数计算(){
var input=document.getElementById('input');
var output=document.getElementById('output');
output.value=\u计算(input.value);
}
document.addEventListener('DOMContentLoaded',calculate)
textarea{width:100%;display:block;margin:5px auto;}
(A或B)和(C或D)
跑

请从给定字符串中添加所需的结果。对不起,我在上面添加了它。您必须在代码中包含某种形式的递归。例如:在完成
while()
循环之前,请检查
finalQuery
是否仍包含括号内的项。如果确实如此,请删除其中的所有内容并将其推回到
阵列上。
while()
测试将看到
array
仍然有内容并将继续循环。您基本上是在为特定于域的语言编写解释器。如果您愿意(我也推荐),您可以编写自己的解释器。用语法/AST、解析器/标记器和运行时完成。一个快速的谷歌搜索吸引了我,这似乎是一个很好的指南。或者你可以直接阅读经典读物,读到我有一个关于输入格式的问题。由于
condition=X和/或Y
,输入是否只有带括号的like
(condition)和/或(condition)和/或…
?@SehunPark此答案对您解决问题没有帮助吗?抱歉,检查晚了。你的回答真的很有帮助。我从你的代码中得到了一个提示,并做了一点修改。它工作得很好。谢谢:)