2016-06-10 160 views
0

我試圖創建一個JavaScript函數,提取列名稱,表名稱和從一個字符串的條件,如「選擇col1,col1從table1其中x =」123a「」,我寫了下面的代碼只提取列名稱,但問題是當我執行它時,結果很奇怪,它的1,2,3,4,5!任何人都可以向我解釋爲什麼我會得到這個奇怪的結果?sql查詢在javascript解析

<!DOCTYPE html> 
<html> 
<head></head> 
<body> 

<button onclick = "MyFunc()">Try</button> 
<p id = "y"></p> 

<script> 
function MyFunc(){ 

var str = "select col1 , col2 from table1"; 
var res = str.split(" "); 
var cols = []; 
for (x in res) 
{ 
if (x !== "select" && x !=="from") 
cols.push(x); 

} 
document.getElementById("y").innerHTML=cols; 
} 
</script> 

</body> 
</html> 
+1

'x'中是關鍵的數組/索引/反對你正在循環,以獲得您需要的值'res [x]' – Rhumborl

+0

https://jsfiddle.net/n6t2z854/ – AshBringer

+0

如果您使用瀏覽器控制檯檢查變量而不是轉換爲字符串並注入HTML。隨意問任何你需要的方向。 –

回答

0

嗯。

您可以檢查這項工作如何(只需將其粘貼到瀏覽器控制檯):

var columnNames = (/\bselect\b\s+([\S\s]+?)from/i.exec("select col1 , col2 from table1") || [,""])[1].split(/\s*,\s*/g); 
console.log("This column names are: " + columnNames.join(",")); 

或創建功能:

function getColumnNames(input) { 
    return (/\bselect\b\s+([\S\s]+?)from/i.exec(input) || [,""])[1].split(/\s*,\s*/g); 
} 
+0

這種工作方式非常完美,但如果我想獲取表名以及在哪裏條件,該怎麼辦? – Maryam

+0

哦,我想我明白了:D,它似乎有效:var columnNames =(/\bselect\b\s+([\S\s]+?)from/i.exec("select col1,col2,col3 FROM table1,table2 WHERE x = 1 AND y ='BQQ';「)|| [,」「])[1] .split(/ \ s *,\ s */g); var tables =(/\bfrom\b\s+([\S\s]+?)where/i.exec("select col1,col2,col3 FROM table1,table2 WHERE x = 1 AND y ='BQQ'; 「)|| [,」「])[1] .split(/ \ s *,\ s */g); var conditions =(/\bwhere\b\s+([\S\s]+?);/i.exec("select col1,col2,col3 FROM table1,table2 WHERE x = 1 AND y ='BQQ'; 「)|| [,」「])[1] .split(/ \ s *,\ s */g); – Maryam

+0

請注意,你可以簡單地使用'console.log(「這個列名是:」,columnNames);'。控制檯比舊的警報更強大。 –