【问题标题】:How to find the position of matching brace in data?如何在数据中找到匹配大括号的位置?
【发布时间】:2014-11-20 01:31:55
【问题描述】:

我是 Coding 新手,目前我正在研究 NodeJs 文件系统模块。

我正在处理一个包含大量数据并且数据存储为字符串的文件。

我的问题是,我找不到匹配的右括号和'}'的位置。

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

【问题讨论】:

  • 如果您在 NodeJS 中:您可以将其解释为 JSON 吗?
  • 你用的是什么IDE?
  • 我只使用记事本++。我主要使用 javascript 并使用 nodeJs 作为服务器部分。
  • 我不这么认为解释成json,因为它是一个动态生成的文件。@fboes
  • 好像不对,文件是怎么生成的?它可以生成一个 xml(存在好的 xml 解析器)或 JSON(所以你只需要JSON.parse())吗?

标签: javascript html node.js angularjs


【解决方案1】:
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()
        }
     }
};

【讨论】:

    【解决方案2】:

    假设你想有一个程序来做!!!

    只需一一比较,直到找到匹配的大括号。代码可能与此类似(未测试) -

        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 )
    

    【讨论】:

    • var string = "{{{}}}" // 在我的文件中 var data = "//整个文件数据";所以我必须使用 var string = data. @prasad
    猜你喜欢
    • 1970-01-01
    • 2013-02-15
    • 2014-06-17
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 2022-07-10
    • 1970-01-01
    相关资源
    最近更新 更多