VS Code代码片段条件插入及文件名转换问题求助
VS Code代码片段:文件名转标题格式问题求助
我需要创建一个VS Code代码片段,将类似12.3-Test_me.md的Markdown文件名转换为Test Me格式,具体要求:
- 去除文件名开头的数字、符号(如
.、-、_)前缀 - 去除文件名末尾的
.md后缀 - 将文件名中的下划线
_替换为空格 - 每个单词首字母大写
但尝试过程中,下划线替换操作失败,且尝试使用TextMate文档提及的条件插入(conditional insertions)功能时,VS Code中的正则表达式执行出错。我曾用${4/(.+)/(?1: )/}判断捕获组4是否有内容并替换为空格,但未成功。
尝试的代码片段
"test": { "prefix": "xxx", "body": [ "Input: $TM_FILENAME\nTreatment:\n\n${TM_FILENAME/(^[0-9 _\\.-]+)|((\\w+)([ _-]))|(\\w+)|(\\.md$)/1: '$1'\n2: '$2'\n3: '$3'\n4: '$4'\n5: '${5:/capitalize}'\n6: '$6'\n\n/g}------\n", "Output:\n'${TM_FILENAME/(^[0-9 _\\.-]+)|((\\w+)([ _-]))|(\\w+)|(\\.md$)/$3${4: }${5:/capitalize}/g}'\n(expected: 'Test Me')\n\n------\n", "Fails:\n'${TM_FILENAME/(^[0-9 _\\.-]+)|((\\w+)([ _-]))|(\\w+)|(\\.md$)/$3${4/(.+)/(?1: )/}${5:/capitalize}/g}" ], "description": "Create title from file name" }
执行输出
Input: 12.3-Test_me.md Treatment: 1: '12.3-' 2: '' 3: '' 4: '' 5: '' 6: '' 1: '' 2: 'Test_' 3: 'Test' 4: '_' 5: '' 6: '' 1: '' 2: '' 3: '' 4: '' 5: 'Me' 6: '' 1: '' 2: '' 3: '' 4: '' 5: '' 6: '.md' ------ Output: ' Test_ Me ' (expected: 'Test Me') ------ Fails: '${TM_FILENAME/(^[0-9 _\.-]+)|((\w+)([ _-]))|(\w+)|(\.md$)/ (?1: )/}/capitalize/g}
问题求助
- 如何实现目标格式转换?
- VS Code是否支持TextMate中的conditional insertions功能?
解决方案
关于条件插入的支持情况
VS Code代码片段的正则替换不支持TextMate的(?1:...)这种嵌套正则的条件语法,但支持${n:+替换内容}形式的条件插入:当捕获组n匹配到内容时,插入指定的替换文本,否则插入空。
正确的代码片段实现
修改替换正则,利用${n:+...}条件语法实现需求:
"Create Markdown Title": { "prefix": "md-title", "body": [ "${TM_FILENAME/(^[\\d\\s._-]+)|((\\w+)([_-]))|(\\w+)|(\\.md$)/${1:+}${3:/capitalize}${4:+ }${5:/capitalize}${6:+}/g}" ], "description": "Convert Markdown filename to title format" }
正则说明
^[\d\s._-]+:匹配开头的数字、空格、.、_、-前缀,替换为空(${1:+})(\w+)([_-]):匹配带分隔符的单词,$3取单词部分并大写(${3:/capitalize}),$4匹配到分隔符时替换为空格(${4:+ })(\w+):匹配最后一个单词,大写后插入(${5:/capitalize})\.md$:匹配末尾的.md后缀,替换为空(${6:+})
测试12.3-Test_me.md时,最终输出为Test Me,完全符合需求。
内容的提问来源于stack exchange,提问作者James Newton
相关产品推荐
相关产品推荐

