0
sqlite_master의 sql 열에서 SQLite 결과 집합의 열 이름을 추출하려고합니다. match() 및 split() 함수의 정규 표현식에 정리되어 있습니다.Javascript RegEx를 사용하여 SQLite에서 열 이름 추출 SQL
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');}
);
나는 정규식과
name,seq
Key,Value
IconID,png,img32,img64,Version
어떤 도움을 크게 감상 할 수 ... ... 논문과 같은 문자열로
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)
다음과 같은 SQL 문을 구문 분석합니다.
감사합니다! 나는 그것이 거의 다라고 생각한다. # 1의 RegEx의 결과는 다음과 같습니다. [ "표 sqlite_sequence을 만듭니다 (이름, 서열)", "sqlite_sequence", "이름, 서열"] [ "TABLE tblConfig CREATE (키 TEXT NULL NOT을, 값 TEXT NOT NULL)", "tblConfig" "Key TEXT NOT NULL, Value TEXT NOT NULL"] 2 번 실행하면 [ "CREATE", "sqlite_sequence", "name, seq"]가 표시됩니다. 내가 원한 것은 아니었다. "INTEGER NOT NULL"을 제거하고 쉼표를 유지하는 [2] 열의 다른 열 속성을 제거하려면 어떻게합니까? – DataZombies
@ NimbusSoftware - # 2 참조. for 루프에서 대체는 – DVK
입니다. 다음은 열이 루프를 통해 실행될 때 발생합니다. [ "CREATE", "tblConfig", "Key"]. 칼럼 [2]의 첫 번째 단어를 제외한 모든 것이 핵으로 처리됩니다. 나는 컬럼 [2]을 보길 원합니다 : "Key, Value". 도와 주셔서 감사합니다. 감사. – DataZombies