当前位置: 首页 > news >正文

HTML JS 解析器出sql 中 的所有表名称,支持多条SQL

<!DOCTYPE html>
<html>
<head><title>SQL表名提取器</title><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script><script>function extractTableNames() {// 获取输入的SQL语句var sql = document.getElementById("sqlInput").value;// 定义正则表达式来匹配表名var regex = /\b(?:FROM|JOIN)\s+([\w.]+)/gi;var tableNames = [];// 使用正则表达式提取表名var match;while (match = regex.exec(sql)) {var tableName = match[1];// 处理带有库名称的表名,例如:fr.tablenamevar parts = tableName.split(".");if (parts.length > 1) {tableName = parts[parts.length - 1]; // 获取最后一部分作为表名}tableNames.push(tableName);}// 去重表名var uniqueTableNames = Array.from(new Set(tableNames));// 在页面上显示提取的表名var tableNamesContainer = document.getElementById("tableNamesContainer");tableNamesContainer.innerHTML = uniqueTableNames.join("<br>");}</script>
</head>
<body><h1>SQL表名提取器</h1><label for="sqlInput">输入SQL语句:</label><br><textarea id="sqlInput" rows="5" cols="50"></textarea><br><button onclick="extractTableNames()">提取表名</button><br><div id="tableNamesContainer"></div>
</body>
</html>

一个html页面 ,有一个SQL输入框, js根据输入的sql 使用SQL解析器出sql 中 的所有表名称, 并去重表名显示出来, 按照SQL解析器的语法来提取 sql 表名称 ,注意一定要要一步步 分析并写好代码,注意输入的SQL 可能是多条查询SQL ,需要把表名称全部提取并去重,并考虑表名前可能加库名称 如 fr.tablename 需要考虑 解析规则 词法分析(Lexical Analysis):SQL解析器首先将SQL语句分解为多个单词或符号,这些单词称为"词法记号"(tokens)。词法分析器根据特定的规则,例如空格、逗号、关键字等,将输入的SQL语句分割成词法记号序列。

这个示例使用了JavaScript中的正则表达式来匹配SQL语句中的表名。正则表达式的模式是根据常见的SQL语法规则来设计的,它使用了\b(?:FROM|JOIN)\s+([\w.]+)的模式来匹配FROMJOIN关键字后面的表名。

解析过程如下:

  1. 首先,通过document.getElementById获取输入SQL语句的值。
  2. 然后,定义一个正则表达式regex,使用全局匹配和忽略大小写选项,以匹配FROMJOIN关键字后面的表名。
  3. 使用regex.exec方法在输入的SQL语句中进行迭代匹配,将匹配到的表名添加到tableNames数组中。
  4. tableNames数组进行去重操作,使用Array.from(new Set(tableNames))
  5. 最后,将去重后的表名以换行符分隔显示在页面上。

请注意,此示例只是一个简单的演示,可能无法覆盖所有复杂的SQL语法规则和边缘情况。对于更复杂的SQL语句解析需求,可能需要使用更强大的SQL解析库或编写更复杂的解析器代码。

http://www.lryc.cn/news/118094.html

相关文章:

  • 【雕爷学编程】Arduino动手做(05)---热敏电阻模块之的基本参数、模块特色、电原理与使用说明
  • MS31860T 国产 8通道串行接口低边驱动器 可PIN TO PIN替代DRV8860 高性价比
  • 百度 amis 当成 UI 库用
  • 质检工具(FindBugs、CheckStyle、Junit、Jmeter、Apifox)
  • MS31803TE 国产 四通道低边驱动器 PIN对PIN替代DRV8803
  • wordpress数据表中标签和分类如何区分?
  • css3 实现文字横幅无缝滚动
  • unity 修改默认脚本
  • 【MySQL】增删查改基础
  • 【vue+el-table+el-backtop】表格结合返回顶部使用,loading局部加载
  • 设计模式(4)装饰模式
  • Redis——通用命令介绍
  • EmberJS教程_编程入门自学教程_菜鸟教程-免费教程分享
  • Diffusion扩散模型学习4——Stable Diffusion原理解析-inpaint修复图片为例
  • dns的负载分配是什么
  • adb 通过wifi连接手机
  • 将应用设置成系统App/获取Android设备SN号
  • 2.CUDA 编程手册中文版---编程模型
  • Claude 2、ChatGPT、Google Bard优劣势比较
  • Docker安装Hadoop分布式集群
  • 文盘 Rust -- tokio 绑定 cpu 实践
  • 微服务Ribbon-负载均衡策略和饥饿加载
  • uni-app 运行时报错“本应用使用HBuilderX x.x.x 或对应的cli版本编译,而手机端SDK版本是x.x.x。不匹配的版本可能造成应用异常”
  • Windows使用docker desktop 安装kafka、zookeeper集群
  • 11 | 苹果十年财报分析
  • Zookeeper与Redis 对比
  • 跨境商城服务平台搭建与开发(金融服务+税务管理)
  • docker配置文件
  • Mysql数据库之单表查询
  • macos搭建appium-iOS自动化测试环境