разбить строку javascript на несколько полей с помощью регулярных выражений - PullRequest
1 голос
/ 24 августа 2010

Я пытаюсь встроить удобную возможность запроса dsl-ish в мой javascript.

Дано:

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

каков самый элегантный способ разбора этой строки sql-esque в пригодные для использования объекты, такие как:

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

Прежде чем я начал безнадежно зацикливаться, я подумал, что найдется какой-нибудь мастер регулярных выражений с одной строкой.

1 Ответ

0 голосов
/ 24 августа 2010

Создайте грамматику (EBNF или BNF), а затем напишите для нее парсер.Мало того, что у вас останется больше волос на голове (в конечном итоге вы выдернете волосы, если попытаетесь сделать это с помощью регулярных выражений!), Вы узнаете что-то новое и крутое* Если вы напишите синтаксический анализатор с рекурсивным спуском, вы можете легко представить свой запрос в виде дерева.

Вот EBNF, с которого можно начать:

query            ::= criterion { criterion }
criterion        ::= boolean-operator { filter }
boolean-operator ::= "not" | "or" | "and"
filter           ::= variable, "=", value
...