2010-08-23 106 views
1

我试图在我的javascript中构建一个方便的dsl-ish查询能力。使用正则表达式在多个字段上的javascript拆分字符串

给出:

var query = "lastName = 'smith' and firstName = 'jack' or city = 'vancouver'"; 

什么解析这个SQL式的字符串转换成可用的对象,如最优雅的方式:在我开始绝望循环我想会有一些正则表达式

[ 
{ 
field:'lastName', 
operator:'=', 
value:'smith', 
join:'and' 
}, 
{ 
field:'firstName', 
operator:'=', 
value:'jack', 
join:'or' 
}, 
{ 
field:'city', 
operator:'=', 
value:'vancouver' 
} 
] 

主持人有一个单线。

+1

你疯了?大声笑:) – Topera 2010-08-23 21:17:59

+0

如果你正在从数据库查询请不要使用正则表达式。在发送到后端之前循环并验证每个元素。 – 2010-08-23 21:20:36

+0

你有优先规则吗? (即和以前或) – Tmdean 2010-08-23 21:23:34

回答

0

创建一个语法(EBNF或BNF),然后为它编写一个解析器。你不仅会在头上留下更多的头发(如果你试图用正则表达式来完成这项工作,你最终会把头发拉出来!),你会学到一些新的东西并且很酷:)。

如果你编写递归下降解析器,你可以很容易地将你的查询表示为一棵树。

下面是一个EBNF让你开始:

query   ::= criterion { criterion } 
criterion  ::= boolean-operator { filter } 
boolean-operator ::= "not" | "or" | "and" 
filter   ::= variable, "=", value 
相关问题