【问题标题】:Regex and nested square brackets to separate subsets正则表达式和嵌套方括号来分隔子集
【发布时间】:2013-02-17 23:52:33
【问题描述】:

我正在尝试构建一个快速的 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"
}

但是在提取那些嵌套的方括号时我不知所措。有什么想法吗?

【问题讨论】:

  • 正则表达式和“嵌套”通常是一个糟糕的组合......
  • 我同意。你会推荐什么替代方案?当我试图找到另一种方式时,我不知所措。任何建议将不胜感激!

标签: javascript regex json square-bracket


【解决方案1】:

本质上,您正在寻找不是方括号的每个连续字符集。括号的顺序无关紧要。所以你可以很容易地做这样的事情:

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]

【讨论】:

  • 这么简单的方法。诚然,最难的问题往往有最简单的解决方案。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
  • 2014-10-09
  • 1970-01-01
  • 2013-06-14
  • 2013-01-20
  • 1970-01-01
相关资源
最近更新 更多