使用正则表达式提取SQL语句的部分内容

时间:2012-04-18 15:43:59

标签: javascript regex extraction

我想要提取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

2 个答案:

答案 0 :(得分:0)

/SELECT\s(.*?)\sFROM\s((?!WHERE|ORDER BY|GROUP BY).*?)(?:WHERE\s|ORDER BY\s|GROUP BY\s|\Z)(.*)/

答案 1 :(得分: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;