我有一个用例,我需要从我的sql查询中获取表名 比如假设我有
select * from schema.tableName
OR
select * from schema.tableName where id = 123
OR
select column1, column2, column3 from schema.tableName where id = 123
在上述情况下需要从sql查询中获取'schema.tableName',如何在Node中使用regex来完成。
我试过(?<=from)(\s+\w+\b)
但我收到警告,javascript不支持后面的内容。
答案 0 :(得分:0)
可以轻松编写与您作为示例提供的查询类似的查询中的表名匹配的RegEx。
试试此RegEx:/select .* from ([^ ]*)/i
请参阅以下完整代码:
var sql1 = "select * from tableName";
var sql2 = "select * from tableName where id = 123";
var sql3 = "select column1, column2, column3 from tableName where id = 123";
var t1 = sql1.match(/select .* from ([^ ]*)/i);
var t2 = sql2.match(/select .* from ([^ ]*)/i);
var t3 = sql3.match(/select .* from ([^ ]*)/i);
console.log(t1[1]);
console.log(t2[1]);
console.log(t3[1]);
但是,如果您需要匹配所有可能的有效选择查询中的表名,RegEx将变得复杂。
您可以使用上述RegEx的精简版本来获得相同的结果。
/ from ([^ ]*)/i
答案 1 :(得分:0)
也许是这样的:
var query = "select column1, column2, column3 from schema.tableName where id = 123"
var result = query.match(/from\s+([\.\w]+)+\s+/i);
var tableName = null;
if (result && result.length > 1) {
tableName = result[1];
}