2010-10-06 35 views
9

如果一個字符串包含.ini文件數據,我該如何在JavaScript中解析它? 有沒有任何JavaScript解析器會在這方面提供幫助?包含.ini數據的字符串的javascript解析器

這裏,通常字符串包含讀取配置文件後的內容。 (閱讀無法通過JavaScript來實現,但不知何故,我收集在一個字符串的.ini信息。)

+0

INI文件格式可能會有所不同,你剛纔談到換行分隔的鍵值的字符串對,還是有部分,評論等等...期望的輸入和輸出會很好 – 2010-10-06 06:42:22

+0

是的,它包含部分,鍵值對,評論。 – sat 2010-10-06 06:44:44

回答

17

我寫inspirated 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年5月10日更新:修復的錯誤鍵包含空格。

編輯:

Sample of ini file read and parse

+0

這適用於我 - 感謝您發佈它。需要注意的是,與大多數INI處理函數不同,此解析器返回的部分和設置區分大小寫。 – dlchambers 2013-10-08 12:52:16

+0

這不適用於包含空格的鍵 – m1alesis 2017-05-04 10:10:04

+0

我修復了鍵空格的情況。你可以再試一次。 @ m1alesis – cuixiping 2017-05-10 09:00:23

2

這裏有一個功能是誰能夠從一個字符串解析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; 
} 
+0

這段代碼真的很棒!有一個小錯誤(引用行是未定義的),我將其更改爲行,它工作! 「} else if(lines.length == 0 && section){」 – 2015-12-03 07:15:01

0

你可以嘗試config-ini-parser,它類似於蟒蛇ConfigParser沒有I/O操作

它可以通過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

相關問題