Golang regexp.ReplaceAllString忽略替换字符串"$";
我试图用我找到的正则表达式把CamelCase转换成snake_。下面是我正在使用的代码片段:Golang regexp.ReplaceAllString忽略替换字符串"$";,go,Go,我试图用我找到的正则表达式把CamelCase转换成snake_。下面是我正在使用的代码片段: in := "camelCase" var re1 = regexp.MustCompile(`(.)([A-Z][a-z]+)`) out := re1.ReplaceAllString(in, "$1_$2") 正则表达式将匹配lCase$1这里是l,$2是大小写,因此使用替换字符串“$1\u$2”应该会导致驼峰大小写。相反,它会导致出现cameCase 将替换字符串更改为“$1”将导致出现。如
in := "camelCase"
var re1 = regexp.MustCompile(`(.)([A-Z][a-z]+)`)
out := re1.ReplaceAllString(in, "$1_$2")
正则表达式将匹配lCase
$1
这里是l
,$2
是大小写
,因此使用替换字符串“$1\u$2”
应该会导致驼峰大小写
。相反,它会导致出现cameCase
将替换字符串更改为“$1”
将导致出现。如果我将其更改为“$1+$2”
,结果将是camel+Case
,正如预期的那样()
现在,我的解决方法是使用“$1+$2”
作为替换字符串,然后使用字符串。替换将加号更改为下划线。这是一个bug还是我做错了什么?修复方法是使用${1}{2
(或者${1}{2}
对称)
Per(我的重点):
在模板中,变量由表单的子字符串表示
$name或${name},其中name是非空的字母序列,
数字、和下划线
在$name表单中,name被带到
尽可能长:$1x相当于${1x},而不是${1}x,并且,
$10相当于${10},而不是${1}0
因此,在$1\u$2
中,您实际上是在寻找一个名为1
的组,然后是另一个名为2
的组,并将它们放在一起
至于为什么使用$1_$2
(或$foo$2
)会导致“cameCase”,同一文档中说:
对超出范围或不匹配的索引或名称的引用
正则表达式中不存在的将替换为空切片
因此,用“$1\u$2”
替换等同于仅用“$2”
替换