You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 09:51:07