猿问

在 node.js 中解析 WHERE 子句

我正在尝试将 mysql 查询的 WHERE 子句解析为表达式以从 json 文件中获取数据

例如:

`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"';

所以我想了解有没有其他更好的方法来实现这一目标?


慕斯709654
浏览 244回答 2
2回答

斯蒂芬大帝

在第一步中拆分你whereString的正则表达式模式/(`[^`]+`=(?:"[^"]+"|\S+))(?:\s+AND\s+|$)/g并存储所有Group 1匹配项。在第二步中,对每个匹配项进行替换,最后将所有匹配项与字符串合并AND

繁华开满天机

方法略有不同,对引用字符串的形式无动于衷;除引号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; }
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答