删除文件名的扩展名并使用正则表达式 vscode 片段将 camelCase 转换为 snake case?
Remove the extension of filename and convert camelCase to snake case using regex vscode snippets?
我需要在同一结构上创建多个文件。导出的模块和文件名有一定的关系。我必须转换。输入和输出示例。
startNewGame.ts => start-new-game
gameOver.ts => game-over
ALongNameForAFile.ts=> a-long-name-for-file
short.ts => short
我当前的正则表达式是
${TM_FILENAME/([A-Z])/-${1:/downcase}/g}
目前我只能删除这么小的更改大写字母并添加 -
。有两个问题
- 我无法删除
.ts
- 开头多了
-
注意:我在 vscode 片段中使用这个
您可以使用此代码段:
const arr = ['startNewGame.ts', 'gameOver.ts',
'ALongNameForAFile.ts', 'short.ts'];
arr.forEach(s => {
console.log(
s.replace(/(?!^)(?=[A-Z])/g, '-').replace(/\.\w+$/, '').toLowerCase()
);
});
解决这个问题的步骤如下:
.replace(/(?!^)(?=[A-Z])/g, '-')
: 在大写字母 前插入-
.replace(/\.\w+$/, '')
: 删除扩展部分
.toLowerCase()
: 小写结果字符串
您即将删除文件扩展名:改用 TM_FILENAME_BASE
。参见 vscode snippet variables。
"filename change": {
"prefix": "_co",
"body": [
"${TM_FILENAME_BASE/(^[A-Z])|([A-Z])/${2:+-}${2:/downcase}${1:/downcase}/g}",
],
"description": ""
},
由于前导 -
仅在开头有大写字母时出现,我发现单独处理这种情况最容易。所以现在的正则表达式是:
(^[A-Z])|([A-Z])
// 顺序很重要。
${2:+-}
是一个条件,只有在有捕获组2时才添加-
。
我需要在同一结构上创建多个文件。导出的模块和文件名有一定的关系。我必须转换。输入和输出示例。
startNewGame.ts => start-new-game
gameOver.ts => game-over
ALongNameForAFile.ts=> a-long-name-for-file
short.ts => short
我当前的正则表达式是
${TM_FILENAME/([A-Z])/-${1:/downcase}/g}
目前我只能删除这么小的更改大写字母并添加 -
。有两个问题
- 我无法删除
.ts
- 开头多了
-
注意:我在 vscode 片段中使用这个
您可以使用此代码段:
const arr = ['startNewGame.ts', 'gameOver.ts',
'ALongNameForAFile.ts', 'short.ts'];
arr.forEach(s => {
console.log(
s.replace(/(?!^)(?=[A-Z])/g, '-').replace(/\.\w+$/, '').toLowerCase()
);
});
解决这个问题的步骤如下:
.replace(/(?!^)(?=[A-Z])/g, '-')
: 在大写字母 前插入.replace(/\.\w+$/, '')
: 删除扩展部分.toLowerCase()
: 小写结果字符串
-
您即将删除文件扩展名:改用 TM_FILENAME_BASE
。参见 vscode snippet variables。
"filename change": {
"prefix": "_co",
"body": [
"${TM_FILENAME_BASE/(^[A-Z])|([A-Z])/${2:+-}${2:/downcase}${1:/downcase}/g}",
],
"description": ""
},
由于前导 -
仅在开头有大写字母时出现,我发现单独处理这种情况最容易。所以现在的正则表达式是:
(^[A-Z])|([A-Z])
// 顺序很重要。
${2:+-}
是一个条件,只有在有捕获组2时才添加-
。