2014-09-25 97 views
1

我是新來的編碼,目前我正在研究NodeJs文件系統模塊。如何找到數據中匹配大括號的位置?

我正在處理一個包含大量數據和存儲爲字符串的數據的文件。

我的問題是,我無法找到匹配的大括號和'}'的位置。

{ // I know the index of '{' 
    { 
    { 
    } 
    { 
    } 
    } 
    { 
    { 
    } 
    } 
} // have to find position here. 
+0

如果你在的NodeJS:是否有可能爲你只是把它解釋爲JSON? – fboes 2014-09-25 10:10:30

+0

您使用的是什麼IDE? – IshaS 2014-09-25 10:10:34

+0

我只用記事本++。我主要使用JavaScript並使用nodeJs作爲服務器部分。 – kumark 2014-09-25 10:12:47

回答

0

假設你想要一個程序來做到這一點!

只需逐個比較,直到找到匹配大括號。代碼可能會與此類似(未測試) -

var string = "{{{}}}"; 

    var leftCurlyBraceIndex = 0, // index of the '{' to which you need to find the matching '}' 
     rightCurlyBracesTobeIgnored = 0, 
     rightCurlyBraceIndex = -1; 

    for (var i = leftCurlyBraceIndex + 1, l = string.length; i < l; i++) { 
     if (string[i] == "}") { 
     if (rightCurlyBracesTobeIgnored == 0) { 
      rightCurlyBraceIndex = i; break; 
     } else { 
      rightCurlyBracesTobeIgnored -= 1; 
     } 
     } else if (string[i] == "{"){ 
     rightCurlyBracesTobeIgnored += 1; 
     } 
    } 

    alert(rightCurlyBraceIndex) 
+0

var string =「{{{}}}」//在我的文件var data =「//整個文件數據」;所以我必須使用var string = data。 @prasad – kumark 2014-09-25 10:22:36

+0

謝謝@Prasad,你的代碼給出了正確的輸出。 – kumark 2014-09-25 10:38:31

0
var str = '{{{}{}}{{}}}', matchBrace; 
matchBrace = function(str, i) { 
    var index = 0, leftBraces = [], len; 
    if(str.charAt(i) === '}') { 
     return -1; 
    } 
    for(index = i, len = str.length; index < len; ++index) { 
     if(str.charAt(index) === '{') { 
      leftBraces.push('{'); 
     } 
     if(str.charAt(index) === '}') { 
      if(leftBraces.length === 1) { 
       return index; 
      } 
      leftBraces.pop() 
     } 
    } 
};