如何将带有子查询的SQL查询解析到字段中?

时间:2018-09-26 09:43:07

标签: javascript sql regex

我需要从SQL SELECT查询中获取字段,表和其他信息。

我的注册信息

/select(.*?)from(.*)/gi

测试查询

SELECT foo FROM table
SELECT foo FROM table WHERE field = 1
SELECT foo FROM table WHERE field IN (SELECT bar FROM bars)
SELECT (SELECT foo FROM foos) FROM table
SELECT (SELECT foo FROM foos) FROM table WHERE field IN (SELECT bar FROM bars)

预期结果(组1,组2)

1: foo                    2: table
1: foo                    2: table WHERE field = 1
1: foo                    2: table WHERE field IN (SELECT bar FROM bars)
1: (SELECT foo FROM foos) 2: table
1: (SELECT foo FROM foos) 2: table WHERE field IN (SELECT bar FROM bars)

实际结果(第1组,第2组)

1: foo                    2: table
1: foo                    2: table WHERE field = 1
1: foo                    2: table WHERE field IN (SELECT bar FROM bars)
1: (SELECT foo            2: foos) FROM table
1: (SELECT foo            2: foos) FROM table WHERE field IN (SELECT bar FROM bars)

前三个查询匹配良好,后两个查询匹配不良,因为第一个regExp组是贪婪的。如果我知道子查询到字段中总是放在方括号之间,该如何正确地划分任何查询?我认为我应该使用以下内容:

(?=select)
(?!select)
(?<=select)
(?<!select)

找到select并忽略下一个from,但我不知道如何。

谢谢

0 个答案:

没有答案