如何在VSCode代码片段中合并两次正则转换生成指定格式类名?
在VSCode代码片段中单次转换生成目标类名
你可以用单个正则替换表达式同时完成连字符转下划线、单词首字母大写的操作,直接得到Test_Class_File格式的类名,对应的代码片段变量是:
"${TM_FILENAME_BASE/(^[a-z]|(-)[a-z])/${2:+_}${1:/replace(-,)/:/upcase}/g}"
转换逻辑拆解
这个表达式通过全局匹配(g标志)处理两种情况:
- 匹配文件名开头的小写字母(
^[a-z]):- 因为没有捕获到连字符(
$2为空),所以${2:+_}不会生成下划线 - 把匹配到的字母转为大写(
${1:/replace(-,)/:/upcase},这里replace(-,)用于清除无效匹配,实际仅对开头字母生效)
- 因为没有捕获到连字符(
- 匹配连字符后跟的小写字母(
(-)[a-z]):$2捕获到连字符,${2:+_}将其替换为下划线- 把连字符后的小写字母转为大写(
${1:/replace(-,)/:/upcase}先去掉连字符,再转大写)
验证效果
对于输入文件名test-class-file.php,TM_FILENAME_BASE的值是test-class-file,经过上述转换后:
- 开头的
t转为T -c转为_C-f转为_F
最终得到Test_Class_File,完全符合需求。
对比原转换逻辑
这个单个表达式同时完成了:
- 原第一个转换的连字符转下划线操作
- 原第二个转换的单词首字母大写操作,并且保留了单词之间的下划线分隔
内容的提问来源于stack exchange,提问作者janw
相关产品推荐
相关产品推荐

