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.]+)的模式来匹配FROM
和JOIN
关键字后面的表名。
解析过程如下:
- 首先,通过
document.getElementById
获取输入SQL语句的值。 - 然后,定义一个正则表达式
regex
,使用全局匹配和忽略大小写选项,以匹配FROM
和JOIN
关键字后面的表名。 - 使用
regex.exec
方法在输入的SQL语句中进行迭代匹配,将匹配到的表名添加到tableNames
数组中。 - 对
tableNames
数组进行去重操作,使用Array.from(new Set(tableNames))
。 - 最后,将去重后的表名以换行符分隔显示在页面上。
请注意,此示例只是一个简单的演示,可能无法覆盖所有复杂的SQL语法规则和边缘情况。对于更复杂的SQL语句解析需求,可能需要使用更强大的SQL解析库或编写更复杂的解析器代码。