2010-10-06 4 views
9

Si une chaîne contient des données de fichier .ini, comment puis-je l'analyser en JavaScript? Y a-t-il un analyseur JavaScript qui vous aidera à cet égard?javascript parser pour une chaîne contenant des données .ini

Ici, une chaîne contient généralement le contenu après avoir lu un fichier de configuration. (Lecture ne peut pas être fait par javascript, mais de toute façon je recueillir des informations .ini dans une chaîne.)

+0

fichiers .ini peuvent varier en format, vous parlez à peu près une chaîne de retour à la ligne-seperated valeur clé paires, ou y a-t-il aussi des sections, des commentaires et ainsi de suite ... l'entrée et la sortie désirées feraient du bien –

+0

ouais, il contient des sections, paire de valeurs clés, commentaires. – sat

Répondre

17

j'ai écrit une fonction javascript Inspiré du 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 mise à jour: correction de bug de keys contient des espaces.

EDIT:

Sample of ini file read and parse

+0

Cela fonctionne bien pour moi - merci de l'avoir posté. Une mise en garde est que, contrairement à la plupart des fonctions de gestion INI, les sections et les paramètres retournés par cet analyseur sont sensibles à la casse. – dlchambers

+0

cela ne fonctionne pas pour les touches qui contient des espaces – m1alesis

+0

J'ai corrigé la casse des espaces conatins clés. vous pouvez l'essayer à nouveau. @ m1alesis – cuixiping

2

est ici une fonction qui est en mesure d'analyser les données ini d'une chaîne à un objet! (Côté client)

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; 
} 
+0

Ce code est vraiment génial !!! il y a une petite erreur dedans (la référence à la ligne n'est pas définie), je l'ai changée en lignes et ça a marché !!! "} else if (lines.length == 0 && section) {" –

0

Vous pouvez essayer le config-ini-parser, il est similaire à python ConfigParser sans opérations d'E/S

Il pourrait être installé par NPM ou charmille. Voici un exemple:

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 

Pour de plus amples détails, vous pouvez consulter la page principale du projet ou des npm package page

Questions connexes