парсер javascript для строки, содержащей данные .ini - PullRequest
10 голосов
/ 06 октября 2010

Если строка содержит данные файла .ini, как я могу ее проанализировать в JavaScript? Есть ли какой-нибудь парсер JavaScript, который поможет в этом отношении?

здесь, обычно строка содержит содержимое после чтения файла конфигурации. (чтение не может быть сделано через JavaScript, но каким-то образом я собираю информацию .ini в строку.)

Ответы [ 3 ]

18 голосов
/ 17 сентября 2012

Я написал функцию javascript, вдохновленную node-iniparser.js

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 обновлено: исправлена ​​ошибка, в которой ключи содержат пробелы.

EDIT:

Пример чтения и анализа INI-файла

2 голосов
/ 10 марта 2013

Вот функция, которая может анализировать 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(line.length == 0 && section){
        section = null;
    };

}

return value;
}
1 голос
/ 22 июня 2016

Вы можете попробовать config-ini-parser , он похож на python ConfigParser без операций ввода-вывода

Может быть установлен с помощью 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...