2012-04-18 5 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

+0

は、WHERE、ORDER BY、GROUP BY、または単に存在しないことができます。 – iLevi

+0

私は最後のグループ(groupby、...など)をキャッチし、別の正規表現で処理することを考えました... – iLevi

答えて

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

+0

javascriptでこの正規表現を実行しようとしましたが、それは私のために実行されることはありませんが、LOLをデバッグするために私のリーグから出てくるエラーが含まれています – Banning