2010-10-06 27 views
9

Si una cadena contiene datos de un archivo .ini, ¿cómo puedo analizarla en JavaScript? ¿Hay algún analizador de JavaScript que ayude a este respecto?javascript parser para una cadena que contiene datos .ini

aquí, normalmente la cadena contiene el contenido después de leer un archivo de configuración. (Lectura no se puede hacer a través de JavaScript, pero de alguna manera reunir información .ini en una cadena.)

+0

Ini pueden variar en formato, está usted hablando sólo de una cadena de salto de línea-separadas clave-valor pares, o también hay secciones, comentarios, etc. ... la entrada y salida deseada funcionarían bien –

+0

, sí, contiene secciones, par de valores clave, comentarios. – sat

Respuesta

17

escribí una función de JavaScript inspirated por 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 actualización: corrección de errores de las llaves contienen espacios.

EDIT:

Sample of ini file read and parse

+0

Esto funciona bien para mí, gracias por publicarlo. Una advertencia es que, a diferencia de la mayoría de las funciones de manejo INI, las secciones y las configuraciones devueltas por este analizador distinguen entre mayúsculas y minúsculas. – dlchambers

+0

esto no funciona para llaves que contienen espacios – m1alesis

+0

He arreglado la caja de llaves con espacios. puedes intentarlo de nuevo. @ m1alesis – cuixiping

2

Aquí es una función que es capaz de analizar los datos ini de una cadena a un objeto! (En el lado del cliente)

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

¡Este código es realmente increíble! hay un pequeño error (la referencia a la línea no está definida), lo cambié a líneas y funcionó. "} else if (lines.length == 0 && section) {" –

0

Usted podría intentar la config-ini-parser, que es similar a python ConfigParser sin operaciones I/O

Podría ser instalado por NPM o glorieta. He aquí un ejemplo:

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 

Para más detalles se puede comprobar en la página principal del proyecto o de los archivos npm package page

Cuestiones relacionadas