✨parse .ini file
JS ⟩ value ⟩ object ⟩ regex ⟩ example ⟩ parse .ini file
// using "ini" package from npm
const { parse: parseINI } = require("ini");
parseINI("x = 10\ny = 20"), // { x: '10', y: '20' }replit ⟩ parse .ini file, INIParser (old code)
// ⭐ .ini file format
// ---------------------------
// 1. Blank lines and lines starting with semicolons are ignored.
// 2. Lines wrapped in [ and ] start a new section.
// 3. Lines containing an alphanumeric identifier followed by an = character
// add a setting to the current section.
// 4. Anything else is invalid.
function parseINI(string) {
let result = {}; // object to hold the top-level fields
let currentSection = result; // current section
// ----------------------------
// patterns (without '/g' flag)
// ----------------------------
const setting = /^(?<key>\w+)=(?<value>.*)$/;
// ╰── key ──╯ ╰─ value ──╯ <---- named groups
const section = /^\[(?<sectionName>.*)\]$/;
// ╰─ section name ─╯
const blankOrComment = /^\s*(;.*)?$/;
// begin to parse
string
.split(/\r?\n/) // split into separate lines
.forEach(line => {
let match;
// ignore blank line or comment
if (blankOrComment.test(line)) return;
// new setting to current section
if (match = line.match(setting)) {
const { key, value } = match.groups; // named groups
currentSection[key] = value;
return; // return from closure (early exit)
}
// new section
if (match = line.match(section)) {
const { sectionName } = match.groups; // named groups
currentSection = result[sectionName] = {};
return;
}
// anything else is invalid.
throw new Error("Line: '" + line + "' is not valid.");
});
return result;
}💈範例:
npm ⟩ package: ini
Last updated
Was this helpful?