Разобрать пункт WHERE в node.js - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь разобрать условие WHERE запроса mysql в выражение для получения данных из json file

Например:

`price`=8.95 AND `title`="The Lord price= AND of the Rings"

приведенный выше пример должен быть преобразован к строке ниже после замены цены и значения заголовка на левой стороне

8.95==8.95 && 'The Lord price= AND of the Rings'=="The Lord price= AND of the Rings"

Я создал один код ( jsfiddle ) для достижения этой цели, но он сломается, если я добавлю AND `в значение, как показано ниже (оно возвращает false, если условие не соответствует)

var obj = {price: 8.95, title: "'The Lord price= AND `of the Rings'"};
var whereString = '`price`=8.95 AND `title`="The Lord price= AND `of the Rings"';

Итак, я хотел понять, есть ли другой лучший способ добиться этого?

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Немного другой подход, безразличный к форме, которую принимает строка в кавычках; разделить на AND вне кавычек, заменить и присоединиться:

let source = '`price`=8.95 AND `title`="The Lord price= AND of the Rings"';
let result = source
    .split(/\s*\bAND\b\s*(?![^`"]+")/)
    .map(s => s.replace(/`\w+`=(.*)/, '$1==$1'))
    .join(' && ');

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
1 голос
/ 05 апреля 2020

На первом шаге разделите ваш whereString с шаблоном регулярных выражений

/(`[^`]+`=(?:"[^"]+"|\S+))(?:\s+AND\s+|$)/g

и сохраните все Group 1 совпадения.

На втором шаге сделайте замены для каждого сопоставить и окончательно объединить все совпадения со строкой AND

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...