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

GitHub GraphQL refs的query参数语法文档及正则匹配咨询

GitHub GraphQL API refs查询参数语法说明

GitHub GraphQL API中refs的query参数使用的是GitHub代码搜索语法的子集,并非标准正则表达式。目前官方文档未针对该参数提供完整语法说明,但可结合代码搜索匹配规则与实际测试,总结出可用的语法规则:

可用匹配规则

  • 起始锚点:用^匹配字符串开头,比如^v可筛选所有以v开头的refs
  • 结束锚点:用$匹配字符串结尾,比如\.0$可筛选以.0结尾的refs
  • 字符范围:支持[0-9]匹配数字、[a-z]匹配小写字母这类范围表达式
  • 通配符:*匹配任意长度的任意字符(含空字符),?匹配单个任意字符
  • 重复次数限制:暂不支持+、*这类正则重复量词,需用通配符间接实现,比如v[0-9]*\.[0-9]*可覆盖v1、v1.2、v1.2.3这类格式的标签

针对你的需求的查询方案

要匹配符合^v\d+(\.\d+)+$的语义化版本号标签(如v1.0、v2.3.4),可尝试以下查询字符串:

^v[0-9]*\.[0-9]+(\.[0-9]+)*$

若API端匹配效果达不到预期,更可靠的方式是先获取所有以v开头的refs(用query:"^v"),再在客户端用标准正则^v\d+(\.\d+)+$做二次过滤。

修改后的GraphQL查询示例

query($owner:String!,$name:String!,$cursor:String){
  repository(owner:$owner,name:$name){
    refs(after:$cursor,first:100,
         orderBy:{field:TAG_COMMIT_DATE,direction:DESC},
         refPrefix:"refs/tags/",
         query:"^v[0-9]*\\.[0-9]+(\\.[0-9]+)*$"){
      nodes{name,target{...on Commit{committedDate},...on Tag{tagger{date}}}}
      pageInfo{hasNextPage,endCursor}
    }
  }
}

注意:字符串中的反斜杠需要转义,因此写成\\.和\\[。

内容的提问来源于stack exchange,提问作者Jeff G

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 10:22:09