2016-06-10 158 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);'。控制台比旧的警报更强大。 –