【问题标题】:Remove the extension of filename and convert camelCase to snake case using regex vscode snippets?删除文件名的扩展名并使用正则表达式 vscode 片段将 camelCase 转换为蛇形大小写?
【发布时间】:2020-12-27 17:26:08
【问题描述】:

我需要在同一结构上创建许多文件。导出的模块和文件名有一些关系。我必须转换。输入和输出示例。

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 sn-ps 中使用这个

【问题讨论】:

    标签: javascript regex vscode-snippets


    【解决方案1】:

    您即将删除文件扩展名:改用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 时才添加 -

    【讨论】:

    • 在开始时处理额外的-,我只看到这个文件名:ALongNameForAFile.ts
    • 我编辑了答案。让我知道这是否有效。
    【解决方案2】:

    你可以使用这个 sn-p:

    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(): 结果字符串小写

    【讨论】:

    • 抱歉不知道vscode snippets。我提供了 Javascript 解决方案,因为那是有问题的标签。
    • 如果你制作一个正则表达式,它将在 sn-ps 中工作。
    • 大写转小写不是 regen 做的
    猜你喜欢
    • 1970-01-01
    • 2021-04-18
    • 2021-10-31
    • 2010-12-21
    • 1970-01-01
    • 2021-10-16
    • 2017-02-20
    • 1970-01-01
    相关资源
    最近更新 更多