2010-10-06 8 views
9

यदि किसी स्ट्रिंग में .ini फ़ाइल डेटा है, तो मैं इसे जावास्क्रिप्ट में कैसे पार्स कर सकता हूं? क्या कोई जावास्क्रिप्ट पार्सर है जो इस संबंध में मदद करेगा?एक स्ट्रिंग के लिए जावास्क्रिप्ट पार्सर जिसमें .ini डेटा

यहां, आमतौर पर स्ट्रिंग में कॉन्फ़िगरेशन फ़ाइल पढ़ने के बाद सामग्री होती है। (पढ़ने जावास्क्रिप्ट के माध्यम से नहीं किया जा सकता है, लेकिन किसी भी तरह मैं एक स्ट्रिंग में .ini जानकारी इकट्ठा होते हैं।)

+0

आरं फाइलों से प्रारूप में भिन्न हो सकते हैं, तो आप सिर्फ न्यू लाइन से अलग की कुंजी-मान के एक स्ट्रिंग के बारे में बात कर रहे हैं: यहाँ एक उदाहरण है जोड़े, या वहाँ भी अनुभाग, टिप्पणियां और आगे है ... वांछित इनपुट और आउटपुट अच्छा होगा –

+0

हाँ, इसमें अनुभाग, कुंजी मूल्य जोड़ी, टिप्पणियां शामिल हैं। – sat

उत्तर

17

मैं एक जावास्क्रिप्ट समारोह inspirated लिखा 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 के द्वारा अद्यतन: के बग को ठीक कुंजी में रिक्त स्थान होते हैं।

संपादित करें:

Sample of ini file read and parse

+0

यह मेरे लिए अच्छा काम करता है - इसे पोस्ट करने के लिए धन्यवाद। एक चेतावनी यह है कि, अधिकांश आईएनआई हैंडलिंग कार्यों के विपरीत, इस पार्सर द्वारा लौटाए गए अनुभाग और सेटिंग्स केस संवेदनशील हैं। – dlchambers

+0

यह उन कुंजियों के लिए काम नहीं करता है जिनमें रिक्त स्थान – m1alesis

+0

हैं, मैंने कुंजी कोनाटिन रिक्त स्थान के मामले को ठीक किया है। आप इसे फिर से कोशिश कर सकते हैं। @ m1alesis – cuixiping

2

यहाँ एक समारोह एक वस्तु के लिए एक स्ट्रिंग से आरं डेटा पार्स करने के लिए समर्थ लोगों का है! (क्लाइंट की तरफ)

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

यह कोड वाकई शानदार है !!! इसमें थोड़ी सी त्रुटि है (रेखा का संदर्भ अनिर्धारित है), मैंने इसे लाइनों में बदल दिया और यह काम किया !!! "} और अगर (लाइनें। लम्बाई == 0 && अनुभाग) {" –

0

आप config-ini-parser की कोशिश कर सकते हैं, यह मैं बिना ConfigParser अजगर को/ओ संचालन

यह NPM या बोवर द्वारा स्थापित किया जा सकता समान है।

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

संबंधित मुद्दे