jq 在外部添加捕获组结果

Nav*_*ddy 1 regex json object capturing-group jq

例如,

输入:

    {
       "id":"abc",
       "name": "name-middlenane-lastname-1"
    },

    {
        "id":"123",
        "name": "fname-flast-2"
    }
Run Code Online (Sandbox Code Playgroud)

回复:

    {
         "id":"abc",
         "name": "name-middlename-lastname-1",
         "newkey": "name-middlename-lastname"
    },

    {
          "id":"123",
          "name": "fname-flast-2",
          "newkey": "fname-flast"
    }
Run Code Online (Sandbox Code Playgroud)

每个对象中的文件是一个字符串,其中包含由“-”连字符分隔的字符和数字。我需要从开头到起始数字的完整字符串。我不想要号码后面的任何内容。然后添加字段,其键为newkey,值应提取不带数字的字符串。因此,输出应包含旧字段和新字段。

Rom*_*est 5

jq解决方案:

样本input.json

[
  {
    "id": "abc",
    "name": "name-middlenane-lastname-1"
  },
  {
    "id": "123",
    "name": "fname-flast-2"
  }
]
Run Code Online (Sandbox Code Playgroud)
jq 'map(. + (.name | capture("(?<newkey>.+)-[0-9]+")) )' input.json
Run Code Online (Sandbox Code Playgroud)

输出:

[
  {
    "id": "abc",
    "name": "name-middlenane-lastname-1",
    "newkey": "name-middlenane-lastname"
  },
  {
    "id": "123",
    "name": "fname-flast-2",
    "newkey": "fname-flast"
  }
]
Run Code Online (Sandbox Code Playgroud)