关于词法分析:使用RegEx从JSON中删除对象

Remove an object from JSON using RegEx

我有这种格式的JSON对象:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 {
    "1f626": {
        "name":"frowning face with open mouth",
        "ascii": [],
        "code_points": {
            "base":"1f626",
            "default_matches": [
                "1f626"
             ],
            "greedy_matches": [
                "1f626"
             ],
            "decimal":""
         }
     }
 }

我必须使用正则表达式删除code_points对象。

我尝试过使用这个regex:

1
(("code\w+)(.*)(}))

但它只是选择了第一行。为了完全摆脱code_points对象,我必须选择直到花括号结束。

我该怎么做?

注意:我必须使用正则表达式而不是JavaScript删除它。请不要发布任何javascript答案或将其标记为基于javascript的问题的可能副本。


或者,在命令行,如果可以使用jq

1
jq"del(.[].code_points)" <monster.json >smaller_monster.json

这将删除每个二级对象中的code_points键。

我的机器花了大约5秒钟在一份60兆字节的文件上。

它不是正则表达式,但也不是javascript。因此,它满足了一半的非功能性需求。


("code_points")([\s\S]*?)(})

你遇到的问题是,.实际上是除
以外的任何字符,所以在这种情况下,我通常使用[\s\S]这意味着任何空格和非空格字符(所以它实际上是任何字符)。另外,你还应该通过添加?使*量词变懒。

记住,如果在code_points中有内部对象(其他{}时),此正则表达式将无法正常工作。