问题描述
我遇到了这个问题,想知道这意味着什么以及它如何工作? 在这里使用#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"
我也想知道如果Feed中有成千上万个软件包,它将返回多少个软件包并显示在“任务输入UI”下拉列表中。是否有已知的限制(例如前100个)?
解决方法
#regex
似乎没有任何地方的文档,但是它使用两个以空格分隔的参数。第一个是正则表达式,第二个是“路径表达式”,标识要与之匹配的值,在这种情况下为feed
输入参数的值。如果正则表达式与该值匹配,则返回第一个捕获子表达式,否则返回空字符串。
在此特定上下文中,feed
参数的格式为'projectId / feedId',其中projectId和feedId是GUID,对于组织范围的提要(例如,不属于在内部)。因此,第一个正则表达式提取项目ID并将其插入URL,第二个正则表达式提取提要ID并将其插入URL。
在撰写本文时,其调用的API的默认限制为1000。
,Regex代表正则表达式,它使您可以匹配任何 pattern 而不是精确的字符串。您可以在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
- 但不匹配:
/a
,abcdef
,this-doesn't-match
请注意,完整的端点由正则表达式和硬编码的字符串组成!