2012-04-18 80 views
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

+0

有總是將是一個'WHERE'條款? – climbage 2012-04-18 15:52:29

+0

nope,可以是WHERE,ORDER BY,GROUP BY或根本不存在。 – iLevi 2012-04-18 16:18:53

+0

我想趕上最後一組(其中,groupby,...等),並與另一個正則表達式處理... – iLevi 2012-04-18 16:20:10

回答

0
/SELECT\s(.*?)\sFROM\s((?!WHERE|ORDER BY|GROUP BY).*?)(?:WHERE\s|ORDER BY\s|GROUP BY\s|\Z)(.*)/ 
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; 
+0

如果您希望能夠將'SELECT'與'select'(不區分大小寫)匹配,那麼您最後需要'/ gi'。 – lbstr 2012-06-15 17:08:44

+0

剛試過在JavaScript中運行這個正則表達式......它包含的錯誤不會爲我運行,但它的方式脫離我的聯盟來調試哈哈 – Banning 2014-03-27 21:50:35