问题描述
我需要在相同的结构上创建许多文件。导出的模块和文件名有一些关系。我必须转换。示例输入和输出。
from .decorator import time_decorator
@time_decorator
def view(request):
pass
我当前的正则表达式是
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 片段中使用了这个
解决方法
您已接近删除文件扩展名:改用 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 时才添加 -
。
您可以使用此代码段:
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()
:小写结果字符串