jsonnet 中的多字符替换函数

function for multi char replacement in jsonnet

如何替换字符串中的多个字符?

我目前的策略是嵌套 stdlib 函数:

tst.jsonnet:

local tst = '0-1.2';

{
  tst: std.strReplace(std.strReplace(tst, '.', '_'), '-', '_'),
}

输出:

> ./jsonnet tst.jsonnet
{
   "tst": "0_1_2"
}

我希望能够使用该功能,例如:

std_name(tst, ['.', '-'], '_')

不幸的是 jsonnet doesn't support regex(这对这个 use-case 有很大帮助),不过你可以编写自己的函数来实现你的 std_name()(我将它命名为 strReplaceMany() 在下面的代码中):

local tst = '0-1.2';

// Loop over fromArray (of strings), running std.stdReplace()
local strReplaceMany(str, fromArray, to) = std.foldl(
  function(retStr, from) std.strReplace(retStr, from, to),
  fromArray,
  str
);
{
  tst: strReplaceMany(tst, ['.', '-'], '_'),
}