GitHub GraphQL refs 的 query 参数支持正则语法吗?
数据小许
结论
根据现有文档,无法认定 refs 的 query 参数支持正则表达式。GitHub GraphQL 文档只说明该参数按 ref 名称筛选,没有列出具体语法,也未说明 ^、$ 或 + 等正则运算符是否可用。GitHub GraphQL refs 文档
因此,不能直接把 ^v\d+(\.\d+)+$ 作为 query 参数的正则表达式使用。要可靠地筛选这类标签,可以查询 refs/tags/ 下的标签,再在客户端用正则表达式过滤。
查询标签并在客户端过滤
从原查询中移除 query:"????",保留 refPrefix:"refs/tags/",并使用游标分页:
refs(
after: $cursor,
first: 100,
orderBy: { field: TAG_COMMIT_DATE, direction: DESC },
refPrefix: "refs/tags/"
) {
nodes {
name
target {
... on Commit { committedDate }
... on Tag { tagger { date } }
}
}
pageInfo { hasNextPage endCursor }
}
取得所有分页结果后,在 JavaScript 中对标签名进行完整匹配:
const versionTagPattern = /^v\d+(?:\.\d+)+$/;
const matchingTags = refs.filter(ref => versionTagPattern.test(ref.name));
这样可以匹配 v1.2、v1.2.3 等名称。^ 和 $ 分别限定字符串的开头和结尾,确保整个标签名都符合格式。如果返回的 name 带有 refs/tags/ 前缀,先去掉此前缀再匹配。
分页注意事项
first: 100 表示每页最多返回 100 个节点。要筛选仓库中的全部标签,当 hasNextPage 为 true 时,需要继续请求,并将 endCursor 作为下一页的 $cursor。只检查第一页可能会漏掉匹配的标签。
备注:内容仅供参考。
