替代消极展望

问题描述

我正在编写一个 terraform 模块,我需要在其中捕获和替换字符串中的标记标记{{...}} 括起来,但我不想捕获那些匹配 {{global-...}}标记

例如:

locals {
    input = "Hello {{name}} this is {{global-env}}. Welcome to {{home}}."
    output = replace(local.input,"/{{(.+?)}}/","{{$1-en_US}}")
}

output "output" { value = local.output }
# Actual:   Hello {{name-en_US}} this is {{global-env-en_US}}. Welcome to {{home-en_US}}
# Expected: Hello {{name-en_US}} this is {{global-env}}. Welcome to {{home-en_US}}

在 C# 正则表达式中,我本可以使用负面展望:

{{(?!global-)(.+?)}}

然而,由于 terraform 及其底层 Go lang 运行时不支持环视,有什么替代方案?位于 terraform 模块中也不允许我遍历每个匹配项并测试捕获组。

解决方法

您可以通过使用第二个替换从第一个替换后以 -en_US 开头并以 global- 结尾的占位符中删除 -en_US 来解决这个问题:

output = replace(replace(local.input,"/{{(.+?)}}/","{{$1-en_US}}"),"({{global-.+?)-en_US}}","$1}}")