在掌舵中的两个字符之间提取字符串

Extracting string between two characters in helm

我正在尝试从 _helper.tpl 中的 values.yaml 中提取 () 之间的所有字符串。

在我的_helper.tpl

{{- define "firstchart.extraction" -}}
{{- regexFindAll "(?<=\()(.*?)(?=\))"  .Values.monitor.url -1 -}}
{{- end -}}

我的values.yaml文件

monitor:
   url: "(zone-base-url)/google.com/(some-random-text)"

所以我想提取 zone-base-urlsome-random-text。如何做到这一点?

看起来正则表达式库是不支持任何类型环视的 RE2。 这意味着,您需要将 non-consuming 环视“转换”为消费模式,仍然将捕获组保持在 \(\) 分隔符之间:

{{- regexFindAll "\((.*?)\)"  .Values.monitor.url -1 -}}

或者,

{{- regexFindAll "\(([^()]*)\)"  .Values.monitor.url -1 -}}

详情:

  • \( - 一个 ( 字符
  • (.*?) - 第 1 组:除换行符以外的任何零个或多个字符尽可能少([^()]* 匹配除 ( 和 [=19 以外的零个或多个字符=] 个字符)
  • \) - 一个 ) 字符

-1 参数仅提取第 1 组内容。

模式中的文字反斜杠必须加倍以表示文字反斜杠。