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 组件和箭头函数进行了类似的更改。
经过 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 组件和箭头函数进行了类似的更改。