2

我想像这样提取部分 SQL 字符串:

SELECT *,somecolumn, anothercolum FROM sometable INNER JOIN anotherTable WHERE somecolumn>1

在变量中:

aVariable = "*,somecolumn, anothercolum";
anotherVariable = "sometable INNER JOIN anotherTable";
Vaiable = "somecolumn>1";

我试过这个(在 JavaScript 中):

/SELECT\s(\*|[\w\,\_\d]+)\sFROM\s([\w\,\_]]+)(?:\s(.*))

但它失败了INNER JOIN

4

2 回答 2

0
/SELECT\s(.*?)\sFROM\s((?!WHERE|ORDER BY|GROUP BY).*?)(?:WHERE\s|ORDER BY\s|GROUP BY\s|\Z)(.*)/
于 2012-05-22T20:41:36.460 回答
0

尝试这个:

var reg =/^(\s*select\s+)(\w+(\s+as\s+\w+\s*)?||\[\s*\w+\s*\](\s+as\s+\w+\s*)?||\*\s*)(\s*\,\s*\w+(\s+as\s+\w+\s*)?||\s*\,\s*\[\s*\w+\s*\](\s+as\s+\w+\s*)?)*(\,\*)?(\s+from\s+)\w+\s*(\s+where\s+\[?\s*\w+\s*\]?\s*((\+||\-||\*||\/||\%||\^||(\>\=)||(\<\=)||\=||\>||\<)\s*\[?\s*\w+\s*\]?)?(\s+and\s+\[?\s*\w+\s*\]?\s*((\+||\-||\*||\/||\%||\^||(\>\=)||(\<\=)||\=||\>||\<)\s*\[?\s*\w+\s*\]?)?(\s+and\s+\[?\s*\w+\s*\]?\s+like\s+\'\%?\s*\w+\W*\w+\s*((\+||\-||\*||\/||\%||\^||(\>\=)||(\<\=)||\=||\>||\<)\s*\w+)?\%?\')?)*\s*)?(\s+order\s+by\s+(\w+\s*((\+||\-||\*||\/||\%||\^||(\>\=)||(\<\=)||\=||\>||\<)\s*\w+)?(\s+desc||\s+asc)*)(\,\w+((\+||\-||\*||\/||\%||\^||(\>\=)||(\<\=)||\=||\>||\<)\w+)?(\s+desc||\s+asc)*)*)?(\s+group\s+by\s+\w+(\,\w+)?(\s+having\s+\w+(\s*(\+||\-||\*||\/||\%||\^||(\>\=)||(\<\=)||\=||\>||\<)\s*\w+)?(\s*\,\s*\w+\s*((\+||\-||\*||\/||\%||\^||(\>\=)||(\<\=)||\=||\>||\<)\s*\w+)?)?)?)?\s*$/g;
于 2012-06-15T16:26:32.857 回答