为什么在 Azure DevOps 扩展的 task.json 中使用 #regex?它检查什么?

Why is #regex used in task.json in Azure DevOps extension? What does it check for?

我遇到了这个问题,想知道这意味着什么以及它是如何工作的? 这里使用#regex有什么意义,它是如何展开的?

https://github.com/microsoft/azure-pipelines-tasks/blob/master/Tasks/DownloadPackageV0/task.json

 "endpointUrl": "{{endpoint.url}}/{{ **#regex ([a-fA-F0-9\-]+/)[a-fA-F0-9\-]+ feed }}_apis**/Packaging/Feeds/{{ **#regex [a-fA-F0-9\-]*/([a-fA-F0-9\-]+) feed** }}{{#if view}}@{{{view}}}{{/if}}/Packages?includeUrls=false"

我还想知道如果提要中有数千个包,它 return 并在任务输入 UI 下拉列表中显示多少包。是否有一个已知的限制,例如前 100 个或类似的限制?

Regex 代表 正则表达式 ,它允许您匹配任何 模式 而不是精确的字符串。您可以在 Azure Devops here

中找到有关如何使用它的更多信息

这个正则表达式非常具体。在这种情况下,正则表达式 ([a-fA-F0-9\-]+/)[a-fA-F0-9\-]+\ 匹配 一个或多个 以下 1) 字母 a-f(小写或大写)或 2) \或 3) - 后跟 / 然后再 这些字符中的一个或多个

您可以将正则表达式 [a-fA-F0-9\-]+/)[a-fA-F0-9\-]+ 复制到 https://regexr.com/ 中进行试验,看看哪些与模式匹配,哪些不匹配。
示例:

  • 匹配a/a a/b abcdef-\/dcba
  • 不匹配/aabcdefthis-doesn't-match

请注意,完整端点由正则表达式和硬编码字符串的串联组成!

#regex 似乎并没有实际记录在任何地方,但它需要两个 space-delimited 参数。第一个是正则表达式,第二个是“路径表达式”,用于标识要匹配的值,在本例中为 feed 输入参数的值。如果正则表达式匹配值,它 returns 第一个捕获子表达式,否则它 returns 空字符串。

在此特定上下文中,feed 参数的格式为 'projectId/feedId',其中 projectId 和 feedId 是 GUID,而 organization-scoped 供稿(即供稿)的 projectId 和 / 被删除不在 项目内)。因此,第一个正则表达式提取项目 ID 并将其插入 URL,第二个正则表达式提取提要 ID 并将其插入 URL.

在撰写本文时,API 调用的默认限制是 1000。