节点.JS逐行读取字符串

Node.JS read a string line by line

本文关键字:字符串 读取 逐行 JS 节点      更新时间:2023-09-26

我正在使用 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[space] 开头的行(例如"snippet cfabort") ->插入到 keyboardShortcuts.keyShort 中,例如 "cfabort"(删除 snippet[space])。

之后的每一行(不包括组之间的空行)->插入到keyboardShortcuts.snippet中,例如""保持组的格式。

然后在空行上中断,以使用下一个代码段开始数据库表中的下一行。

我是否使用 NodeJs 中的读取行? 这似乎只使用文件流而不是内存中的字符串。

我是否使用其他东西? 实现这一目标的最佳方法是什么?


当前工作代码与阿卜杜拉·沙欣的回答:

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, "&lt;");
    str = str.replace(/'>/g, "&gt;");
    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];
        }
    }
});

希望这有帮助,此代码会将其解析为一个对象,所有代码片段都是键,您可以找到与其键匹配的特定片段的所有值

    var object = {};
    text = text.replace(/^'s*['r'n]/gm,"");
    var array = text.split("'n");
    var currentObj = "";
    for(var i=0;i<array.length;i++)
    {
        if(/snippet /g.test(array[i]))
        {
            currentObj = array[i].replace(/snippet /g,"");
            object[currentObj] = "";
        }
        else
        {
            object[currentObj] += array[i];
        }
    }
    console.log(object)

这是输出

{
    cfabort: '<cfabort>',
    cfargument: '<cfargument name=''"${1:ArgName}''" type=''"${2:any}''" default=''"${3:DefaultValue}''" hint=''"${4:hint about this argument}''">',
    cfbreak: '<cfbreak>',
    cfcase: '<cfcase value=''"${1:${SELECTED_TEXT:<!--- code --->}}''">        ${0}</cfcase>',
    cfcatch: '<cfcatch>        ${0}</cfcatch>',
    'cfcatch:type': '<cfcatch type=''"${1:any}''">        ${0}</cfcatch>',
    cfcomponent: '<cfcomponent>        ${0:<!--- code --->}</cfcomponent>',
    cfcontent: '<cfcontent deleteFile=''"${1:no}''" file=''"${2:filename}''" reset=''"${3:yes}''" type=''"${4:fileType}''" variable=''"${5:variableName}''">',
    cfcontinue: '<cfcontinue>',
    cfdefaultcase: '<cfdefaultcase>'
}