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

如何用正则从SQL唯一键语句中提取所有列名(JavaScript场景)

在JavaScript中提取UNIQUE KEY中的指定列名

解决方案思路

要提取UNIQUE KEY部分的所有目标列名,需要分两步处理:

  1. 先捕获每个UNIQUE KEY定义中括号内的所有列内容
  2. 从捕获到的内容中提取纯列名,再筛选出目标列

具体实现代码

const sampleText = `UNIQUE KEY \`index8\` (\`u_login_id\`(255),sys_id,temoid),shouldnot appear text

UNIQUE KEY \`index8\` (sys_id,\`u_login_id\`(255),temp_id),shouldnot appear text

UNIQUE KEY \`index8\` (\`sys_id\`),shouldnot appear text

UNIQUE KEY \`index8\` (sys_id\`,temp_id)`;

// 定义需要提取的目标列集合
const targetColumns = new Set(['u_login_id', 'sys_id', 'temp_id']);
// 匹配UNIQUE KEY括号内所有列内容的正则
const uniqueKeyBlockRegex = /UNIQUE KEY\s+`?\w+`?\s*\(([^)]+)\)/g;
// 提取单个列名的正则(兼容带反引号、长度后缀的情况)
const columnExtractorRegex = /`?(\w+)`?(?:\(\d+\))?/g;

let blockMatch;
// 遍历所有UNIQUE KEY块
while ((blockMatch = uniqueKeyBlockRegex.exec(sampleText)) !== null) {
  const columnSection = blockMatch[1];
  let columnMatch;
  const matchedTargetColumns = new Set();

  // 提取当前块内的所有列名并筛选目标列
  while ((columnMatch = columnExtractorRegex.exec(columnSection)) !== null) {
    const rawColumnName = columnMatch[1];
    if (targetColumns.has(rawColumnName)) {
      matchedTargetColumns.add(rawColumnName);
    }
  }

  // 输出当前块的匹配结果
  console.log(`匹配到的目标列:${Array.from(matchedTargetColumns).join(', ')}`);
}

代码说明

  • uniqueKeyBlockRegex:全局匹配所有UNIQUE KEY定义,捕获括号内的全部列内容,确保不会遗漏任何UNIQUE KEY块
  • columnExtractorRegex:匹配列名的各种写法,包括带反引号(sys_id)、带长度限制(u_login_id(255))的情况,提取出纯列名字符串
  • 目标列筛选:用Set存储目标列,快速判断提取出的列是否符合要求,同时自动去重

示例输出

运行代码后,对应示例文本的输出为:

匹配到的目标列:u_login_id, sys_id
匹配到的目标列:sys_id, u_login_id, temp_id
匹配到的目标列:sys_id
匹配到的目标列:sys_id, temp_id

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:10:28