Я пытаюсь разобрать !Name=John OR !Address="1234 Place Lane" AND tall
в Javascript, извлекая «параметры» в качестве ключа/значения, если у них есть !
спереди и в остальном как простая строка. Пример кода ниже:Регулярное выражение для синтаксического анализа возможных значений котировки
1 var input = '!Name=John OR !Address="1234 Place Lane" AND tall';
2 var params = input.match(/.../g); // <--?? what is the proper regex?
3 var i = params.length;
4 while(i--) {
5 params[i] = params[i].replace(/"/g."");
6 if(params[i].indexOf("!")==0) {
7 params[i] = params[i].substring(1);
8 // Address=1234 Place Lane
9 var position = params[i].indexOf('=');
10 var key = params[i].substring(0,position);
11 var value = params[i].substring(1+position);
12 params[i] = {"key": key, "value": value};
13 // {key: "Address", value: "1234 Place Lane"}
14 // {key: "Name", value: "John"}
15 }
16 }
17 // params = [ {key:"Name",value:"John"}, "OR", {...}, "AND", "tall" ];
Связанные вопрос: javascript split string on space or on quotes to array
Этот вид проблемы, как правило, лучше решать с помощью конечного автомата, который просто просматривает строковый символ, который собирает части, которые он встречает. – jfriend00
Возможно ли использовать 'json', а не синтаксический анализ строк? –
* Отделяющие ключевые слова * могут быть только 'OR' или' AND'? Если да, я бы предпочел разделить их и проанализировать каждую подстроку, вместо использования сложного регулярного выражения. – sp00m