/*类机制定义*/
window.Class = function(name, src) {
src.constructor.prototype = src;
window[name] = src.constructor;
};
/*自定义类*/
Class("ArrayUtils", {
constructor: function() {
},
toArray : function(iterable) {
var length = iterable.length, results = new Array(length);
while (length--) { results[length] = iterable[length] };
return results;
},
camelize : function(s) {
return s.replace(/\-(.)/g, function(m, l){return l.toUpperCase()});
},
inArray : function(arr,item) {
return (this.search(arr,item) != null);
},
search : function(arr,itm) {
for(var i=0; i 100000){
this.items.shift();
}
},
remove : function(item){
var s = [];
//移除item,然后遍历,把剩下发的赋值给items
for(var i = 0, len = this.items.length; i =,,between and
* SQL:= TB2.REF_CITY_CODE = '1' AND TB3.REF_REGION_CODE IN (select * from aaa)
* 【建议把in的用括号包含】 TB2.REF_CITY_CODE = '1' AND (TB3.REF_REGION_CODE IN (select * from aaa) )
*
* HAVING和WHERE的处理方式是一样的HAVING SUM(TB1.PAY_MONEY)0
* where中有聚合函数TB2.REF_CITY_CODE = '1' and sum(TB2.REF_CITY_CODE)
*
* 【建议把between and用括号包含,要不然就拆成2个大于小于】
* TB2.REF_CITY_CODE between 21 and 44可以改成2个TB2.REF_CITY_CODE> 21 and TB2.REF_CITY_CODE200-----建议使用别名,不要把聚合函数放到where里面
*
* select a,b from (select a,b, sum(aa) as c from table1 where c > 100 )
*
*
*
* 目前还不支持一个长括号里面有评级的,能取出来,但是不能替换
*
*
*
* minCell--minCellCopy[相同的()的已被替换成'@',],然后对minCellCopy[i]进行分词即可
*
*
*/
Class("WhereParser", {
constructor: function() {
// this.key = key;//可能处理类型,key:[where|having]
this.items = [];
this.myStack = new Stack();//上面有定义
this.inputString = '';//需要解析的字符串
this.logicOperatorKey = ['and','or','in'];//逻辑运算符,报表中where的关键字分隔符:and ,or 和 in
this.argoOperatorKey = ['=',''];//算数运算符=,>=,
this.exceptOperatorKey = ['between'];//特殊处理between and
this.dataObject =new Array();//对象数组,准备放对象的 {field , op , value}
this.logicOpArray = [];
this.opArray = [];
this.typeArray = [];
},
getDataObject:function(){
return this.dataObject;
},
getLogicOpArray:function(){
return this.logicOpArray;
},
getOpArray:function(){
return this.opArray;
},
getTypeArray:function(){
return this.typeArray;
},
trim: function( text ) {
var rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g;
return (text || "").replace( rtrim, "" );
},
/*判断是否存在此关键字key,type取值{l是逻辑运算符,a是算数运算符}*/
hasKey : function(type,key){
var arrayUtils = new ArrayUtils();
if(type == 'l'){
return arrayUtils.inArray(this.logicOperatorKey,key);
}
if(type == 'a'){
return arrayUtils.inArray(this.argoOperatorKey,key);
}
},
/*设置要解析的字符串*/
setParseString : function(inputString){
this.inputString = inputString;
//document.write( "输入字符串:"+this.inputString+"
");
return this;//链式操作
},
/*
*/
process : function(){
var myString = this.inputString;
//document.write("匹对过程
");
//最小计算单元内的左括号个数,当栈的总和为0,此数归0
var leftCount=0;
//傀儡,只为存放一个char,其实可以不用
var dummy = new Array();
//this.msg(this.inputString.length);
var stackString = "";//只存放栈中完整的字符
var stackStartFlag = false;
var wordString = "";
var wordChar = "";
for(var i =0;i<mystring.length i count dummy if>0){
//遇到空格,分词 -------下一个字符不是算数运算符
if(dummy[i-1]==' '&&this.hasKey('a',dummy[i])==false){
//遇空则清
wordString = "";
}
wordString = wordString + dummy[i];
if(dummy[i]==' '&&wordString.length>1&&this.myStack.getCount()==0){
var wordString = this.trim(wordString);
if(wordString=='AND' || wordString=='OR'){
this.logicOpArray.push(wordString);
}else{
//显示不是and和or的
//alert(wordString);
this.dataObject.push(wordString);
}
}
}
if(stackStartFlag){
stackString = stackString+dummy[i];
}
//当'('的时候入栈,记下位置
if(dummy[i]=='('){
this.myStack.add(i);
if(leftCount==0){
//alert("开始啦");
stackString = "(";
stackStartFlag = true;
}
leftCount++;
this.count++;
}
//当')'的时候出栈
if(dummy[i]==')'){
var before = this.myStack.next();
var current = i+1;
var str = myString.substring(before,current);
leftCount--;
if(leftCount==0){
//alert("结束啦");
//this.dataObject.push(stackString);
stackStartFlag = false;
}
if(this.myStack.getCount()==0){
wordString = stackString;
//recureProcessing(wordString);
}
document.write("leftCount:="+leftCount+" result="+str+"<hr>");
var bStr = myString.substring(0,before);
var aStr = myString.substring(current,myString.length);
var finalStr = bStr + "@" + aStr;
//alert(aStr.length);
if(leftCount>0){
//myStr=myStr.replace(me+'',' ');
if(aStr.length");
// document.write( "<font color="red">this.dataObject:"+this.dataObject.length+"个</font><br>");
// document.write("<br>"+this.inputString+"<br>"+"<br>");
var op ="";
for(var i =0;i ")>-1){
op=">";
}
if(s.indexOf("-1){
op="-1){
op="=";
}
if(s.indexOf(">=")>-1){
op=">=";
}
if(s.indexOf("-1){
op="")>-1){
op="";
}
var type = "number" ;
if(s.indexOf("'")>-1){
type="string";
}
// if(s.indexOf(" OR ")>-1){
// logicOp="and";
// }
//
this.typeArray.push(type);
this.opArray.push(op);
//document.write( "第"+i+"个 "+s+" op="+op+" type="+type+" logicOp="+this.logicOpArray[i]+" <br>");
}
// document.write("<br>");
// document.write("<br>");
// document.write("<br>");
return this;//链式操作
},
msg:function(msg){
alert(msg);
}
});
//(f=3) and (a=1 and (b=2 or (c=4 and e=5) or (c1=4 and e=5) and ( d=3 )
//var a = new WhereParser();
// a.setParseString(" a>='2' or (a in(20)) and b=3 and ( (c in(1,2,3,4)) and (a in(2,3,4) )) or (a=23) and e=3 ");
//a.setParseString(" A>='2' OR C>33 AND B3 AND E</mystring.length>
分享到:
相关推荐
JavaScript代码高亮显示是提高代码可读性的关键工具,通过使用像Highlight.js或Prism.js这样的库,可以在JSP页面上轻松实现这一功能。了解如何正确地集成和配置这些库,可以帮助开发者创建更专业、更易于阅读的代码...
- **js**:JavaScript代码库,包含实现上述功能的具体代码。 - **.idea**:这是IDE(如IntelliJ IDEA)的工作目录,包含了项目配置信息,对开发者来说很有用,但对最终用户来说是不可见的。 综上所述,这个项目是一...
在实际开发中,掌握这些知识点将使你能够编写出高效、健壮的JavaScript代码,构建复杂的前端应用。学习并理解这些内容,不仅有助于你提升编程能力,也为进一步深入学习如Node.js后端开发、WebGL图形渲染、WebSocket...
### JS定义类或对象 #### 一、JavaScript与对象概念 JavaScript是一种基于对象的脚本语言,这意味着在JavaScript中,对象扮演着非常重要的角色。在实际项目开发中,开发者经常通过`function fnname{…}`的方式直接...
- **可读性**:格式化的JavaScript代码更易于阅读,有助于快速理解代码逻辑,对维护和调试非常有利。 - **一致性**:在团队合作中,统一的代码风格可以减少沟通成本,提高代码审查效率。 - **自动化**:通过格式...
"js2c#"工具正是为了解决跨语言转换的问题,它允许开发者将JavaScript代码转换为C#代码,以便在C#环境中使用。 1. **JavaScript到C#的转换原理**: js2c#工具通过解析JavaScript源码,将其语法规则映射为对应的C#...
### JS定义静态类 在JavaScript中,静态类的概念与传统面向对象编程语言中的类有所区别。JavaScript本身是一种基于原型的动态语言,直到ES6(ECMAScript 2015)引入了类语法,才使得类的概念更加清晰。不过,这里的...
JavaScript 小游戏代码汇总 JavaScript 是一种广泛使用的脚本语言,常用于开发 web 应用程序尤其是游戏开发。以下是 JavaScript 小游戏代码汇总的知识点: 1. HTML 基础:代码开头使用的 `<!DOCTYPE html>` 声明...
在JavaScript中,类(Class)、对象(Object)和构造函数(Constructor)是面向对象编程的基础。这篇文章将深入探讨这三个概念...在实际开发中,理解并熟练运用这些概念对于编写高效、可维护的JavaScript代码至关重要。
"代码高亮显示JavaScript插件"是专门用于在Web页面中美化和突出显示JavaScript代码的工具,它能够将原始的黑白文本代码转换为具有不同颜色、字体和样式的视觉盛宴。本文将深入探讨这一主题,详细介绍JavaScript代码...
在Java编程环境中,有时我们需要与JavaScript交互,例如执行一些动态脚本...开发者可以轻松地在Java程序中执行JavaScript代码,调用JavaScript函数,甚至传递Java对象到JavaScript环境,从而实现两者之间的协同工作。
这段代码会在用户点击`.flip-container`元素时,切换`.flipper`元素上的`flip`类,而`flip`类在CSS中定义了翻转效果。 5. **图片资源** "images"文件夹很可能包含了用于展示翻转效果的图片资源。在HTML中,这些...
JavaScript,简称JS,是Web开发中的重要脚本语言,用于实现客户端的动态效果和...同时,了解ES6及后续版本的新特性,如箭头函数、解构赋值、模板字符串、Promise和async/await,会帮助你写出更现代的JavaScript代码。
3. 类(ES6新增):`class`关键字定义类,简化面向对象编程。 五、异步编程 1. AJAX:异步JavaScript和XML,实现页面无刷新更新,常用`XMLHttpRequest`对象。 2. Promise:处理异步操作,解决回调地狱问题,使代码...
本文将深入探讨JavaScript中的类和继承,并结合`prototype.js`文件中的示例进行解析。 ### 类的概念与模拟 在JavaScript中,我们通常使用函数来模拟类的行为。一个函数可以看作是一个类的定义,通过`new`关键字来...
赛车游戏通常包括赛道、赛车、用户控制以及碰撞检测等基本元素,这些都需要通过JavaScript代码和three.js库来实现。 在【标签】中提到的“javascript”,表明这个项目是用JavaScript编写的。JavaScript是Web开发中...
4. 使用`JS_EvaluateScript`或`JS_EvaluateScriptForPrincipals`函数加载并执行JavaScript代码。 5. 在执行完毕后,别忘了清理资源,例如使用`JS_DestroyContext`释放JavaScript上下文。 在`test111.aps`、`test111...
标题 "多功能电子相册翻书页效果特效HTML+css+js代码" 描述了一种用于网页设计的技术,这种技术能够实现模拟真实书籍翻页效果的动态电子相册。电子相册翻页特效使得用户在浏览网页上的照片集时,能够体验到如同翻阅...
对于JavaScript,现代Web开发通常采用模块化和组件化的方式,如使用Webpack或Rollup进行打包,这时候JavaScript代码可能分散在多个`.js`文件中,需要遍历整个项目结构来查找。 总之,“过滤出Java中的SQL,js中的...
总结起来,RequireJS为我们提供了一种优雅的方式来组织和加载JavaScript代码,而结合类的定义和继承,我们可以构建复杂的面向对象应用程序。在实际项目中,我们还可以利用RequireJS的优化工具进行代码压缩和合并,...