vscode 片段 - 多个正则表达式转换文件路径+文件名

vscode snippet - multiple regex transformation filepath+filename

经过 1 周的搜索和试错,我提出了这个问题,希望有人愿意帮助我解决这个问题:

我的 VsCode 代码段应转换以下内容:

D:\FolderX\FolderY\src\Folder1\Folder2\Folder3

进入:

FOLDER1_FOLDER2_FOLDER3_FILENAMEBASE

Folder3 可以是可选的

如果到目前为止出现的是:

"body": [
    "${TM_DIRECTORY/^.+(src\\)(.*)$/${2:/upcase}${3:/upcase}/g}_${TM_FILENAME_BASE/(.*)/${1:/upcase}/}",
],

目前的结果是:

FOLDER1\FODLER2\FOLDER3_FILENAMEBASE

所以我现在需要做的就是将 \ 更改为 _,但如果可能的话,我希望在一个转换中完成。
有人对我的问题有想法或更好的解决方案吗?
非常感谢

你可以使用

"body": [
    "${TM_DIRECTORY/^(?:.*\\)?src\\|([^\\]+)|(\\)/${1:/upcase}${2:+_}/g}_${TM_FILENAME_BASE/.+/${0:/upcase}/}",
],

详情:

  • ^ - 字符串开头
  • (?:.*\\)? - 任意零个或多个字符的可选序列,除换行字符外尽可能多,然后
  • src\\ - src\ 字符串
  • | - 或
  • ([^\\]+) - 第 2 组:\
  • 以外的一个或多个字符
  • | - 或
  • (\\) - 第 3 组:一个 \ 个字符。

${1:/upcase}${2:+_} 替换意味着第 1 组始终以大写形式返回,如果第 2 组匹配(\ 字符),则替换为 _ 字符。

${TM_FILENAME_BASE/.+/${0:/upcase}/} 得到简化,因为有一个 [=25=] 对整个匹配的反向引用,不需要用捕获组包裹整个模式。

这个答案与问题没有直接关系,但是,由于 的答案,我在几个小时后设法让我的代码片段工作。

我正在修改来自 dsznajder - ES7+ React/Redux/React-Native 片段的标准 rfce 片段。

我在我的反应开发中使用以下结构:

src
|--components
|----NavBar
|------index.css
|------index.jsx

因此,在创建功能组件时,我需要使用文件夹的实际名称而不是文件名来创建它们。因此,下面是完整的代码片段,我在自定义 javascriptReact 代码片段中创建了它:

{
  "reactFunctionalExportComponent": {
    "prefix": "rfce_",
    "body": [
      "import './index.css';",
      "",
      "function ${1:${TM_DIRECTORY/^(?:.*\\)//g}}() {",
      "  return(",
      "    <div>",
      "      <h1>${1:${TM_DIRECTORY/^(?:.*\\)//g}}</h1>",
      "    </div>",
      "  );",
      "}",
      "",
      "export default ${1:${TM_DIRECTORY/^(?:.*\\)//g}};",
      ""
    ],
    "description": "Creates a React Functional Component with ES7 module system"
  }
}

结果如下所示:

import "./index.css";

function NavBar() {
  return (
    <div>
      <h1>NavBar</h1>
    </div>
  );
}

export default NavBar;

我对 class 组件和箭头函数进行了类似的更改。