1

次のような JavaScript オブジェクトを受け取る簡単な JavaScript 関数を作成しようとしています。

{
    "sample[one]": "value 1",
    "sample[hard][damn_you[0]]": "this 1",
    "sample[hard][damn_you[1]]": "this 2"
}

そして、それを次のように変換します。

{
    "[sample][one]": "value 1",
    "[sample][hard][damn_you][0]": "this 1",
    "[sample][hard][damn_you][1]": "this 2"
}

微妙だけど大きな違い。テキストの最初の部分を角かっこで囲むという最初の部分はすでに作成しましたが、入れ子になった角かっこを取り出して出すとなると、途方に暮れます。私はかなり長い間試みてきましたが、成功しませんでした。これが私がこれまでに持っているものです:

var data = {
        "sample[one]": "value 1",
        "sample[hard][damn_you[0]]": "this 1",
        "sample[hard][damn_you[1]]": "this 2"
    },
    subset = /^([a-z0-9-_]+?)\[/i;

for (var key in data) {
    if (subset.test(key)) {
        data[key.replace(subset,'[$1][')] = data[key];
    } else {
        data[key.replace(/^(.+)$/,'[$1]')] = data[key];
    }
    delete data[key];
}

これは次のように出力されます:

{
    "[sample][one]": "value 1",
    "[sample][hard][damn_you[0]]": "this 1",
    "[sample][hard][damn_you[1]]": "this 2"
}

しかし、ネストされた角かっこを抽出することになると途方にくれます。何か案は?

4

1 に答える 1

2

基本的に、角かっこではない連続する文字のセットをすべて探しています。ブラケットの順序は関係ありません。したがって、次のようなことを非常に簡単に行うことができます。

key = "["
    +key.replace(/]/g,'[') // replace close brackets with open ones
                           // (to make them the same symbol)
    .replace(/\[+$/,'')    // trim off brackets at the end of the string
    .replace(/\[+/g,"][")  // replace brackets with "][" (separating the words)
    +"]";

たとえばsample[hard][damn_you[0]]、次の手順を実行します。

  • sample[hard][damn_you[0]]
  • sample[hard[[damn_you[0[[
  • sample[hard[[damn_you[0
  • [sample][hard][damn_you][0]
于 2013-03-03T23:47:26.090 に答える