为了账号安全,请及时绑定邮箱和手机立即绑定

在 node.js 中解析 WHERE 子句

在 node.js 中解析 WHERE 子句

慕斯709654 2022-06-16 10:28:04
我正在尝试将 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"';所以我想了解有没有其他更好的方法来实现这一目标?
查看完整描述

2 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

在第一步中拆分你whereString正则表达式模式

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

并存储所有Group 1匹配项。

在第二步中,对每个匹配项进行替换,最后将所有匹配项与字符串合并AND


查看完整回答
反对 回复 2022-06-16
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

方法略有不同,对引用字符串的形式无动于衷;除引号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; }


查看完整回答
反对 回复 2022-06-16
  • 2 回答
  • 0 关注
  • 243 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信