如何在Jsonnet中转义正则表达式,输出单反斜杠至Kubernetes清单?
解决Jsonnet输出正则表达式时保留单个反斜杠的问题
问题场景
需要将字面正则表达式 ^sl1\.([a-z0-9_-]+)\.([a-z0-9_-]+)\.(data)+$ 原封不动从Jsonnet输出到Kubernetes清单中,尝试以下操作后遇到问题:
直接写入正则的错误情况
~> cat test.jsonnet { topic_pattern: '^sl1\.([a-z0-9_-]+)\.([a-z0-9_-]+)\.(data)+$', } ~> jsonnet test.jsonnet STATIC ERROR: test.jsonnet:2:18-64: Unknown escape sequence in string literal: '.'
用双反斜杠转义的问题
~> cat test.jsonnet { topic_pattern: '^sl1\\\.([a-z0-9_-]+)\\\.([a-z0-9_-]+)\\\.(data)+$', } ~> jsonnet test.jsonnet { "topic_pattern": "^sl1\\\.([a-z0-9_-]+)\\\.([a-z0-9_-]+)\\\.(data)+$" }
输出结果中出现多余的反斜杠,不符合需求。
解决方案:使用Jsonnet原始字符串
Jsonnet支持原始字符串语法,用||包裹字符串内容,此时无需对反斜杠进行转义,直接写入目标正则表达式即可。
正确示例代码
{ topic_pattern: ||^sl1\.([a-z0-9_-]+)\.([a-z0-9_-]+)\.(data)+$||, }
执行输出
~> jsonnet test.jsonnet { "topic_pattern": "^sl1\\.([a-z0-9_-]+)\\.([a-z0-9_-]+)\\.(data)+$" }
注:输出的JSON中显示的\\.是JSON自身的转义表示,实际解析后得到的就是单个\.的正则表达式,完全符合Kubernetes清单的需求。
内容的提问来源于stack exchange,提问作者Roman vG
相关产品推荐
相关产品推荐

