C# 字符串转逻辑表达式
1 /// <summary> 2 /// 包含括号的逻辑表达式处理 3 /// </summary> 4 /// <param name="str">包含括号或未包含括号的字符串表达式 1>0&&(3<4)&&(5>4)</param> 5 /// <returns></returns> 6 public bool ExpressionWithParentheseResult(string str) 7 { 8 bool result = false; 9 //首先判断括号,有多少个 10 string[] parentheses = str.Split('('); 11 //创建表达式判断函数 12 DataTable dt = new DataTable(); 13 //有括号的情况 14 if (parentheses.Length > 1) 15 { 16 //先判断括号里面的 17 for (int parenthesesIndex = 1; parenthesesIndex < parentheses.Length; parenthesesIndex++) 18 { 19 //括号里面的内容 20 string ParenthData = parentheses[parenthesesIndex].Split(')')[0]; 21 //进行替换(括号结果替换整个括号的内容) 22 string reParenth = "(" + ParenthData + ")"; 23 str = str.Replace(reParenth, ExpressionResult(ParenthData).ToString()); 24 } 25 } 26 result = ExpressionResult(str); 27 return result; 28 }
1 /// <summary> 2 /// 非括号表达式处理 3 /// </summary> 4 /// <param name="logicStr">逻辑表达式如 1<2&&3>4</param> 5 /// <param name="val"></param> 6 /// <returns></returns> 7 public bool ExpressionResult(string logicStr) 8 { 9 bool result = false; 10 DataTable dt = new DataTable(); 11 var data = Regex.Split(logicStr, @"\|\||&&", RegexOptions.IgnoreCase); 12 var operatorStr = "||"; 13 for (int i = 0; i < data.Length; i++) 14 { 15 if (i != 0) 16 { 17 operatorStr = logicStr.Substring(logicStr.IndexOf(data[i - 1]) + data[i - 1].Length, 2); 18 } 19 var res = (bool)dt.Compute(data[i], ""); 20 result = LogicEx(result, res, operatorStr); 21 } 22 return result; 23 }
1 /// <summary> 2 /// 逻辑判断 3 /// </summary> 4 /// <param name="a1">结果1</param> 5 /// <param name="a2">结果2</param> 6 /// <param name="re">运算符</param> 7 /// <returns></returns> 8 public bool LogicEx(bool a1, bool a2, string re) 9 { 10 bool result = false; 11 switch (re) 12 { 13 case "&&": result = a1 && a2; break; 14 case "||": result = a1 || a2; break; 15 } 16 return result; 17 }
JS 字符串转表达式处理
1 var a=1; 2 var b=2; 3 var result= eval("a == null && b != 5") 4 //结果为false