【问题标题】:javascript parser for a string which contains .ini data包含 .ini 数据的字符串的 javascript 解析器
【发布时间】:2023-03-23 19:31:02
【问题描述】:

如果一个字符串包含一个 .ini 文件数据,我如何在 JavaScript 中解析它? 是否有任何 JavaScript 解析器可以在这方面提供帮助?

这里,通常字符串包含读取配置文件后的内容。 (无法通过 javascript 读取,但我以某种方式在字符串中收集 .ini 信息。)

【问题讨论】:

  • Ini 文件的格式可能有所不同,您是在谈论一串以换行符分隔的键值对,还是还有节、cmets 等...所需的输入和输出就可以了不错
  • 是的,它包含部分、键值对、cmets。
  • 我建议现在是时候从 ini 转移到其他形式,例如 Json 到 Yaml。使用现成的选项更好、更容易地解析。

标签: javascript parsing


【解决方案1】:

我写了一个受node-iniparser.js启发的javascript函数

function parseINIString(data){
    var regex = {
        section: /^\s*\[\s*([^\]]*)\s*\]\s*$/,
        param: /^\s*([^=]+?)\s*=\s*(.*?)\s*$/,
        comment: /^\s*;.*$/
    };
    var value = {};
    var lines = data.split(/[\r\n]+/);
    var section = null;
    lines.forEach(function(line){
        if(regex.comment.test(line)){
            return;
        }else if(regex.param.test(line)){
            var match = line.match(regex.param);
            if(section){
                value[section][match[1]] = match[2];
            }else{
                value[match[1]] = match[2];
            }
        }else if(regex.section.test(line)){
            var match = line.match(regex.section);
            value[match[1]] = {};
            section = match[1];
        }else if(line.length == 0 && section){
            section = null;
        };
    });
    return value;
}

2017-05-10 更新:修复键包含空格的错误。

编辑:

Sample of ini file read and parse

【讨论】:

  • 这对我很有效 - 感谢您发布它。需要注意的是,与大多数 INI 处理函数不同,此解析器返回的部分和设置区分大小写。
  • 我修复了键包含空格的情况。你可以再试一次。 @m1alesis
【解决方案2】:

这是一个能够将 ini 数据从字符串解析为对象的函数! (在客户端)

function parseINIString(data){
var regex = {
    section: /^\s*\[\s*([^\]]*)\s*\]\s*$/,
    param: /^\s*([\w\.\-\_]+)\s*=\s*(.*?)\s*$/,
    comment: /^\s*;.*$/
};
var value = {};
var lines = data.split(/\r\n|\r|\n/);
var section = null;

for(x=0;x<lines.length;x++)
{

    if(regex.comment.test(lines[x])){
        return;
    }else if(regex.param.test(lines[x])){
        var match = lines[x].match(regex.param);
        if(section){
            value[section][match[1]] = match[2];
        }else{
            value[match[1]] = match[2];
        }
    }else if(regex.section.test(lines[x])){
        var match = lines[x].match(regex.section);
        value[match[1]] = {};
        section = match[1];
    }else if(lines.length == 0 && section){//changed line to lines to fix bug.
        section = null;
    };

}

return value;
}

【讨论】:

  • 这段代码真的很棒!!!它有一个小错误(对行的引用未定义),我将其更改为行并且它有效! "}else if(lines.length == 0 && section){"
【解决方案3】:

你可以试试config-ini-parser,它类似于没有I/O操作的pythonConfigParser

它可以通过 npm 或 bower 安装。这是一个例子:

var ConfigIniParser = require("config-ini-parser").ConfigIniParser;
var delimiter = "\r\n"; //or "\n" for *nux

parser = new ConfigIniParser(delimiter); //If don't assign the parameter delimiter then the default value \n will be used
parser.parse(iniContent);
var value = parser.get("section", "option");
parser.stringify('\n'); //get all the ini file content as a string

有关更多详细信息,您可以查看项目主页或npm package page

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    相关资源
    最近更新 更多