经过1周的搜索和尝试,我创建了这个问题,希望有人愿意帮助我解决这个问题:
我的VsCode片段应该转换以下内容:
D:FolderXFolderYsrcFolder1Folder2Folder3
为:
FOLDER1_FOLDER2_FOLDER3_FILENAMEBASE
Folder3可以是可选的
到目前为止出现的是:
"body": [
"${TM_DIRECTORY/^.+(src\\)(.*)$/${2:/upcase}${3:/upcase}/g}_${TM_FILENAME_BASE/(.*)/${1:/upcase}/}",
],
,目前的结果是:
FOLDER1FODLER2FOLDER3_FILENAMEBASE
所以我现在需要做的就是把变成
_
,但如果可能的话,我想在一次变换中完成。谁有一个想法或更好的解决方案,我的问题?
谢谢你
可以使用
"body": [
"${TM_DIRECTORY/^(?:.*\\)?src\\|([^\\]+)|(\\)/${1:/upcase}${2:+_}/g}_${TM_FILENAME_BASE/.+/${0:/upcase}/}",
],
细节:
^
-字符串 起始(?:.*\\)?
-任何零或多个字符的可选序列,除了换行符,尽可能多,然后src\\
-src
string|
-或([^\\]+)
-组2: 以外的一个或多个字符|
-或(\\)
- Group 3: achar.
${1:/upcase}${2:+_}
替换意味着组1总是返回大写,如果组2匹配(字符),它将被替换为
_
字符。
${TM_FILENAME_BASE/.+/${0:/upcase}/}
被简化了,因为有一个$0
反向引用到整个匹配,不需要用捕获组包装整个模式。
这个答案与问题没有直接关系,但是,这是因为@Wiktor Stribiżew的答案,我设法使我的代码片段工作,经过几个小时的时间。
我正在修改dsznajder - ES7+ React/Redux/React- native片段中的标准rfce
片段。
我在react dev中使用以下结构:
src
|--components
|----NavBar
|------index.css
|------index.jsx
因此,在创建功能组件时,我需要使用文件夹的实际名称而不是文件名来创建它们。因此,下面是完整的代码片段,我在自定义javascriptReact代码片段中创建了它:
{
"reactFunctionalExportComponent": {
"prefix": "rfce_",
"body": [
"import './index.css';",
"",
"function ${1:${TM_DIRECTORY/^(?:.*\\)/$1/g}}() {",
" return(",
" <div>",
" <h1>${1:${TM_DIRECTORY/^(?:.*\\)/$1/g}}</h1>",
" </div>",
" );",
"}",
"",
"export default ${1:${TM_DIRECTORY/^(?:.*\\)/$1/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;
我对类组件和箭头函数也做了类似的修改。