Используйте Javascript RegEx для извлечения имен столбцов из SQLite Создать таблицу SQL - PullRequest
0 голосов
/ 07 мая 2010

Я пытаюсь извлечь имена столбцов из набора результатов SQLite из столбца sql sqlite_master. Я запутался в регулярных выражениях в функциях 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 голосов
/ 07 мая 2010

Основная проблема - \ 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, '');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...