4

つまり、中括弧を単純に削除したいということです。"{ this kind of stuff }" を次のように一致させることができます。

"{stuff}".match(/{([^}]*)}/)[1]

ここで私はあまりにも多くを求めていますか?

別の例として、次の JavaScript コードを文字列として取得しました。

{
    var foo = {
        bar: 1    
    };

    var foo2 = {
        bar: 2    
    };
}

外側の中かっこだけを取り除きたい:

var foo = {
    bar: 1
};

var foo2 = {
    bar: 2
}
4

2 に答える 2

9

これを試してください(この回答に基づいてコードを作成しました)。また、その回答のコメントセクションに記載されているように、文字列とコメント(単一行と複数行)の括弧を無視することも知っています:

var block = /* code block */
    startIndex = /* index of first bracket */,
    currPos = startIndex,
    openBrackets = 0,
    stillSearching = true,
    waitForChar = false;

while (stillSearching && currPos <= block.length) {
  var currChar = block.charAt(currPos);

  if (!waitForChar) {
    switch (currChar) {
      case '{':
        openBrackets++; 
        break;
      case '}':
        openBrackets--;
        break;
      case '"':
      case "'":
        waitForChar = currChar;
        break;
      case '/':
        var nextChar = block.charAt(currPos + 1);
        if (nextChar === '/') {
          waitForChar = '\n';
        } else if (nextChar === '*') {
          waitForChar = '*/';
        }
    }
  } else {
    if (currChar === waitForChar) {
      if (waitForChar === '"' || waitForChar === "'") {
        block.charAt(currPos - 1) !== '\\' && (waitForChar = false);
      } else {
        waitForChar = false;
      }
    } else if (currChar === '*') {
      block.charAt(currPos + 1) === '/' && (waitForChar = false);
    }
  }

  currPos++ 
  if (openBrackets === 0) { stillSearching = false; } 
}

console.log(block.substring(startIndex , currPos)); // contents of the outermost brackets incl. everything inside
于 2014-11-23T10:58:49.380 に答える
1

正規表現はそのために作られたものではないというルセロに同意しますが、あなたの質問に答えるために:

問題は、 を除くすべてに一致することです}。しかし、一致させたい内部データ自体に a が含まれているため}、外側の中かっこの内容は一致しません。

{
    var foo = {
        bar: 1
==> };

    var foo2 = {
        bar: 2    
==> };
}

次の正規表現を使用できます。

{([\S\s]*)}

説明する:

{                   match opening {
    (               group
        [\S\s]      match everything, workaround for the missing s option in JS
              *     greedy, makes it match as much as possible
    )               end group
}                   match closing }
于 2013-03-30T11:11:57.093 に答える