使用Javascript RegEx从SQLite Create Table SQL中提取列名

时间:2010-05-07 01:52:29

标签: javascript regex sqlite

我正在尝试从sqlite_master的sql列中提取SQLite结果集中的列名。我得到了match()和split()函数中的正则表达式。

t1.executeSql('SELECT name, sql FROM sqlite_master WHERE type="table" and name!="__WebKitDatabaseInfoTable__";', [],
  function(t1, result) {
   for(i = 0;i < result.rows.length; i++){
     var tbl = result.rows.item(i).name;
     var dbSchema = result.rows.item(i).sql;
// errors out on next line
     var columns = dbSchema.match(/.*CREATE\s+TABLE\s+(\S+)\s+\((.*)\).*/)[2].split(/\s+[^,]+,?\s*/);
   }
  },
  function(){console.log('err1');}
);

我想解析像这样的SQL语句......

CREATE TABLE sqlite_sequence(name,seq);
CREATE TABLE tblConfig (Key TEXT NOT NULL,Value TEXT NOT NULL);
CREATE TABLE tblIcon (IconID INTEGER NOT NULL PRIMARY KEY,png TEXT NOT NULL,img32 TEXT NOT NULL,img64 TEXT NOT NULL,Version TEXT NOT NULL)

变成像这样的字符串...

name,seq
Key,Value
IconID,png,img32,img64,Version

非常感谢任何有关RegEx的帮助。

1 个答案:

答案 0 :(得分:0)

主要问题是匹配正则表达式中的\ s +。应为/.*CREATE\s+TABLE\s+(\S+)\s*\((.*)\).*/)

第二个问题是分裂。我不太确定你在那个正则表达式中尝试做了什么,但这里有一个更简单的方法可以对你的所有例子起作用:

var columns= dbSchema.match(/.*CREATE\s+TABLE\s+(\S+)\s*\((.*)\).*/)[2].split(/,/);
for(i = 0;i < columns.length; i++) {
    columns[i] = columns[i].replace(/\s.*/g, '');
}