我想为 Markdown 文件创建 VS Code 片段。该代码片段应采用文件名(例如:
12.3-Test_me.md
)并将其转换为类似 Test Me
的内容,既不带前导数字,也不带扩展名,并将下划线替换为空格。
但是,我无法用空格替换下划线。
TextMate 片段的文档承诺:
我们还可以在格式字符串中使用条件插入来做出决定。
给出的条件插入的例子是
${1/void$|(.+)/(?1:\n\treturn nil;)/}
VS Code 中可以进行条件插入吗?我所有在代码片段中向正则表达式添加一条线索的尝试都失败了。我只想检查捕获组 4 是否包含任何字符,在这种情况下我想将其替换为空格,因此在代码片段的第三部分中,我尝试使用:
${4/(.+)/(?1: )/}
下面是我用来理解正在发生的事情的片段。第一部分展示了如何应用正则表达式,第二部分是迄今为止我在生成我想要的输出方面的最佳尝试。第三部分显示了我使用条件插入的失败尝试。
"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"
}
这是当我将代码片段应用到名为
12.3-Test_me.md
的文件时产生的结果:
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}
以下代码片段执行以下操作。
输入:12.3-Test_me.md
输出:测试我
片段:
"transform2":{
"prefix": "transform2"
,"body": ["${CLIPBOARD/(\\d*\\.*\\d-)(\\w*)_(\\w*)(\\.\\w*)/${2} ${3:/capitalize}/g}"]
,"description": ""
}
详情:
我使用
CLIPBOARD
变量而不是 TM_FILENAME
只是为了便于测试。trasnform2
代码片段来测试代码片段,而不必处理文件名。TM_FILENAME
替换为 CLIPBOARD
,它将使用文件名而不是剪贴板中的文本。
此代码片段将输入字符串分为 4 组。
(\\d*\\.*\\d-)
=>“12.3-”(\\w*)
=>“测试”_(\\w*)
=> “我”
(\\.\\w*)
=>“.md”现在我们已将字符串分为 4 个组,我们可以编写“格式字符串”(或替换字符串)部分,这是第二个
/
之后的部分
格式字符串:
${2} ${3:/capitalize}
${2}
=>“测试”${3:/capitalize}
=> “我”
/capitalize
将第一个字母大写。把“我”变成“我”。注:
${2} 和 ${3} 之间的文字空格字符。
我认为在这种情况下要理解的主要部分是,当我们使用
_
来帮助捕获 _
之前和之后的分组时。Test_me
实际的
_
字符既不是 group2 也不是 group3 的一部分,因为我们将其留在指定分组文本的 (
括号 )
之外。
您可能仍需要进一步编辑此内容以获得特定用例所需的内容,但希望这有助于解释您在输出字符串中包含
_
以及开头和结尾处的额外空格时遇到的主要问题输出字符串的末尾。