You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JQ提取JSON字段中版本号之前的内容?

我来给你捋捋怎么用JQ实现这个需求哈!核心思路是先处理掉字符串里的多余空格,再精准定位版本号的位置,把前面的内容提取出来,这里有两种实用的方法:

方法一:正则捕获(简洁又直观)

假设你的JSON里目标字段叫name,直接用下面的JQ表达式就行:

.name
| gsub(" "; "")  # 先把所有空格清掉,比如"- sapi -"就变成"-sapi-"
| capture("^(?<prefix>.*)-\\d+\\..*$")  # 精准抓版本号之前的前缀部分
| .prefix

举个实际测试的例子:

  • 输入字符串 "countries- sapi - 1.0" → 清空格后变成 "countries-sapi-1.0" → 提取出前缀 "countries-sapi"
  • 输入字符串 "inventory-list- api - 1.0-snapshot" → 清空格后是 "inventory-list-api-1.0-snapshot" → 提取出 "inventory-list-api"
方法二:分割筛选(应对复杂场景更灵活)

要是你担心正则有局限性,还可以用分割数组再筛选的方式:

.name
| gsub(" "; "")
| split("-")
| reduce .[] as $elem ([];
    if $elem | test("^\\d+\\.") then . else . + [$elem] end
)
| join("-")

这个逻辑是把字符串拆成数组后,逐个检查元素——遇到以「数字+点」开头的元素(也就是版本号的起始)就停,把前面的元素用-拼接起来,结果和第一种方法完全一致。

小提示:

  • 要是你的目标字段不是name,记得把表达式里的.name换成你实际的字段键名哦。
  • 正则里的\\d+\\.专门匹配版本号的开头(比如1.、2.3.),后面的.*能覆盖所有版本后缀(像-snapshot这种都没问题)。

内容的提问来源于stack exchange,提问作者Naveen K Reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:51:44