Javascript从括号中拆分,并使用和/或生成条件语句
我想从包含括号和或的字符串中生成条件语句 所以我从stackoverflow中找到了用括号分隔字符串的代码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(条件) 如果
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此答案对您解决问题没有帮助吗?抱歉,检查晚了。你的回答真的很有帮助。我从你的代码中得到了一个提示,并做了一点修改。它工作得很好。谢谢:)