串線,我用Node.js的工作,有以下代碼塊拉從一個數據庫位置的字符串,剝去某些垃圾並將其設置要均勻,這樣我就可以稍後使用此信息更新另一個表。Node.js的逐行讀取
jsUpdateCon.query('SELECT FileContent FROM codeFile WHERE ID = ?',[msg[1]], function(err, result){
if (err) throw err;
str = result[0].FileContent;
var firstInstance = str.search(/=/) + 2;
var lastInstance = str.lastIndexOf('\\') + 1;
str = str.substring(firstInstance, lastInstance);
str = str.replace(/\\n\\/g, "");
str = str.replace(/\#(.*)/g, "");
str = str.replace(/\n\s*\n/g, "\n");
str = str.replace(/snippet /g, "\nsnippet ");
str = str.replace(/^(?:\t)/gm, "");
console.log(str);
});
下面是輸出的從console.log(str);
snippet cfabort
<cfabort>
snippet cfargument
<cfargument name=\"${1:ArgName}\" type=\"${2:any}\" default=\"${3:DefaultValue}\" hint=\"${4:hint about this argument}\">
snippet cfbreak
<cfbreak>
snippet cfcase
<cfcase value=\"${1:${SELECTED_TEXT:<!--- code --->}}\">
${0}
</cfcase>
snippet cfcatch
<cfcatch>
${0}
</cfcatch>
snippet cfcatch:type
<cfcatch type=\"${1:any}\">
${0}
</cfcatch>
snippet cfcomponent
<cfcomponent>
${0:<!--- code --->}
</cfcomponent>
snippet cfcontent
<cfcontent deleteFile=\"${1:no}\" file=\"${2:filename}\" reset=\"${3:yes}\" type=\"${4:fileType}\" variable=\"${5:variableName}\">
snippet cfcontinue
<cfcontinue>
snippet cfdefaultcase
<cfdefaultcase>
snippet cfdirectory:c
<cfdirectory directory=\"${1:pathToDirectory}\" action=\"${2:copy}\" destination=\"${3:destinationPath}\">
snippet cfdirectory:cr
<cfdirectory directory=\"${1:pathToDirectory}\" action=\"${2:create}\" >
snippet cfdirectory:d
<cfdirectory directory=\"${1:pathToDirectory}\" action=\"${2:delete}\" recurse=\"${3:yes|no}\">
snippet cfdirectory:l
<cfdirectory directory=\"${1:pathToDirectory}\" action=\"${2:list}\" name=\"${3:nameOfOutputSet}\" recurse=\"${4:yes|no}\" sort=\"${3:asc|desc}\" >
snippet cfdirectory:r
<cfdirectory directory=\"${1:pathToDirectory}\" action=\"${2:rename}\" newDirectory=\"${3:newNameforDirectory}\">
snippet cfdump
<cfdump var=\"
snippet cfelse
<cfelse>
${0:<!--- code --->}
我現在需要解析這個字符串插入到數據庫表中的樣品。
以snippet [空格]開頭的任何行(如「snippet cfabort」) - >插入keyboardShortcuts.keyShort,如「cfabort」(刪除片段[空格])。
之後的每一行(不包括組之間的空白行) - >插入到鍵盤快捷鍵.snippet,如「<cfabort>」保持組的格式。
再破一個空行到下一個片段開始的下一行的數據表。
難道我使用的的NodeJS readline?這似乎只使用文件流而不是內存中的字符串。
我還使用別的東西嗎?什麼是完成這個最好的方法?
當前工作守則與阿卜杜拉沙欣的回答是:
jsUpdateCon.query('SELECT FileContent FROM codeFile WHERE ID = ?',[msg[1]], function(err, result){
if (err) throw err;
str = result[0].FileContent;
var firstInstance = str.search(/=/) + 2;
var lastInstance = str.lastIndexOf('\\') + 1;
str = str.substring(firstInstance, lastInstance);
str = str.replace(/\\"/g, "\"");
str = str.replace(/\</g, "<");
str = str.replace(/\>/g, ">");
str = str.replace(/\\n\\/g, "");
str = str.replace(/^\#(.*)/gm, "");
str = str.replace(/\n\s*\n/g, "\n");
str = str.replace(/^(?:\t)/gm, "");
str = str.trim();
str = str.replace(/^\s*[\r\n]/gm,"");
var object = {};
var tempArray = str.split("\n");
var currentObj = "";
for(var i=0; i<tempArray.length;i++){
if(/snippet /g.test(tempArray[i])){
currentObj = tempArray[i].replace(/snippet /g, "");
object[currentObj] = "";
} else {
object[currentObj] += tempArray[i];
}
}
});
使用['.split'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split) –