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

本文介绍了一个HTML页面上的JavaScript脚本,用于从用户输入的SQL语句中提取表名,包括处理库名称和去重功能。使用正则表达式进行基本的词法分析,适用于简单的SQL语句,但不涵盖所有复杂规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!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.tablename
        var 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解析库或编写更复杂的解析器代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学海无涯苦做java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值