1

次のような文字列があります。(((foo)))

次のように文字列からオブジェクトを取得したいと思います。{"text":"foo", "brackets" : 3}

それはどのように可能ですか?

4

3 に答える 3

3

これは必ずしも最適な解決策ではありませんが、正規表現で multiple を に一致させ、その後に with までのすべてを一致させ、その後に multiple withを一致させる(のは非常に簡単です。これにより、オブジェクトを構築する前に、括弧のバランスが取れていることを検証できます。(\(+))([^)]+))(\)+)

var s = '(((foo)))';
var parts = s.match(/^(\(+)([^)]+)(\)+)$/);
// ["(((foo)))", "(((", "foo", ")))"]

// If the start and end match, preventing something like `(((foo)` with unbalanced ()
// and the total length of the extracted array is 4
if (parts.length === 4 && parts[1].length === parts[3].length) {
  // Your result is:
  var yourResultObj = {
    "text": parts[2],
    "brackets": parts[1].length
  }
}

これはすべて文字列操作でも実行できますが、正規表現コードの方が読みやすい場合があります。

于 2013-01-12T16:26:05.820 に答える
1

すべての開き括弧がカウントされていると仮定すると、次のような関数を作成できます。

function makeStringObject(str) {
    var parts = str.split('(');
    return {
        'text': parts[parts.length-1].split(')')[0],
        'brackets': parts.length-1
    }
}
于 2013-01-12T16:41:48.173 に答える
1

閉じ括弧と同じ量の開き括弧を常に持っていると仮定すると、次のようにしてそれらを数えることができます。

var myString = '(((foo)))';
var parens = (mainStr.split("(").length - 1); // 3

そしてそれらを削除するには:

var obj = {parens: parens, text: myString.substr(parens, myString.length - parens)};
于 2013-01-12T16:27:56.087 に答える