如何使用regexReplaceAll替换所有特殊字符且保留换行符?
Go模板中用regexReplaceAll替换特殊字符时保留换行符
你遇到的问题是\\W+正则会把换行符也当成“非单词字符”替换掉,连带着冒号也被替换,才导致两行内容连在一起变成一串。
解决办法很简单,调整正则表达式,把你想保留的字符排除在外就行:
方案1:精准替换指定特殊字符(匹配/和.)
如果你只需要替换/和.这两个字符,直接用精准匹配的正则:
{{- define "testfunc.someYaml" -}} my/lable.one: sdfsdfsdfdsf my/lable.two: sdfsdfsdfdsf {{- end -}} {{- define "testfunc.replaceSpecialChars" -}} {{- regexReplaceAll "[/.]+" (include "testfunc.someYaml" .) "_" -}} {{- end -}}
这个模板返回的结果和你原来多次用replace的效果完全一致:
my_lable_one: sdfsdfsdfdsf my_lable_two: sdfsdfsdfdsf
方案2:保留指定字符,替换其他所有特殊字符
如果你想替换除了字母、数字、下划线、冒号、换行符之外的所有特殊字符,用取反正则:
{{- define "testfunc.replaceSpecialChars" -}} {{- regexReplaceAll "[^\\w:\\n]+" (include "testfunc.someYaml" .) "_" -}} {{- end -}}
这个正则里[^...]表示“匹配不在括号内的所有字符”,\w匹配字母/数字/下划线,:是你要保留的冒号,\n是换行符,所以只会替换这些字符之外的内容,同样能保留换行和冒号格式。
内容的提问来源于stack exchange,提问作者red888
相关产品推荐
相关产品推荐

