You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JavaScript解析条件语句并将指定条件查询转换为JavaScript数组

解析查询语句为JavaScript数组

嘿,我来帮你把这条条件查询语句转成你想要的JavaScript数组格式!

最终解析结果

先直接给你符合要求的扁平化数组结果(补充了client后面缺失的=,原语句里client="..."的运算符不能省略哦):

[
  "project", "=", "test",
  "AND",
  "client", "=", "clinical and connection",
  "OR",
  "module", "IN", "login", "rigister and list",
  "AND",
  "start_date", "BETWEEN", "10-12-2016", "AND", "11-12-2016",
  "ORDER BY", "id", "asc"
]

如果你希望更贴合原语句语义,把IN的参数保留为子数组,也可以写成这样:

[
  "project", "=", "test",
  "AND",
  "client", "=", "clinical and connection",
  "OR",
  "module", "IN", ["login", "rigister and list"],
  "AND",
  "start_date", "BETWEEN", "10-12-2016", "AND", "11-12-2016",
  "ORDER BY", "id", "asc"
]

解析思路说明

拆分的核心是带引号的字符串必须作为单个元素处理,不能被里面的空格或关键字(比如and)拆分:

  1. 优先提取所有带单/双引号的内容,去掉外层引号后作为单个值
  2. 拆分剩余的关键字(AND/OR/IN/BETWEEN/ORDER BY)、字段名、运算符(=)
  3. 清理掉IN语句里的括号和逗号,把参数整理成连续元素或子数组
  4. 最后按原语句顺序把所有元素拼接成数组

动态解析的JavaScript函数示例

如果需要批量处理类似的查询语句,可以用正则匹配实现动态解析:

function parseQueryToArr(query) {
  // 匹配带引号的字符串、关键字、字段/运算符、括号/逗号
  const regex = /"[^"]+"|'[^']+'|AND|OR|IN|BETWEEN|ORDER BY|\w+|=|,|\(|\)/gi;
  const tokens = query.match(regex);
  const result = [];
  let inIN = false;
  let inINValues = [];

  for (const token of tokens) {
    const lowerToken = token.toLowerCase();
    // 处理带引号的字符串,去掉外层引号
    if (token.startsWith('"') || token.startsWith("'")) {
      const value = token.slice(1, -1);
      if (inIN) {
        inINValues.push(value);
      } else {
        result.push(value);
      }
      continue;
    }
    // 处理IN语句的括号
    if (token === '(') {
      if (result[result.length - 1]?.toLowerCase() === 'in') {
        inIN = true;
      }
      continue;
    }
    if (token === ')') {
      if (inIN) {
        // 这里可以选择直接push值到result(扁平化),或者push子数组
        result.push(...inINValues);
        // 如果要子数组就用:result.push(inINValues);
        inIN = false;
        inINValues = [];
      }
      continue;
    }
    // 跳过逗号
    if (token === ',') continue;
    // 保留原大小写的关键字、字段、运算符
    result.push(token);
  }

  return result;
}

// 测试调用
const query = `project=test AND client="clinical and connection" OR module IN ("login",'rigister and list') AND start_date between "10-12-2016" AND "11-12-2016" ORDER BY id asc`;
console.log(parseQueryToArr(query));

调整注释里的代码,就能切换扁平化数组或带IN子数组的格式。

内容的提问来源于stack exchange,提问作者Saravanan Krishnan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:25:36