我正在尝试为redux容器文件创建一个片段,该片段需要导入一些具有相同基本名称的react文件。 TM_FILENAME_BASE非常适合从文件名中删除.js,但是在这种情况下,我的组件文件的扩展名为fun-thing.component.js,容器将跟着扩展名为fun-thing.container.js。>
我用来选择第一个句点之前的所有内容的正则表达式是^([^.]+)
"Redux Container": {
"prefix": "rc",
"body": [
"// @flow",
"import { connect } from 'react-redux';",
"import { ${TM_FILENAME/^([^.]+)/${1:/pascalcase}/}Component } from './${TM_FILENAME/^([^.]+)/$1/}.component';",
"",
"const mapStateToProps = (state) => ({});",
"",
"const mapDispatchToProps = {};",
"",
"export const ${TM_FILENAME/^([^.]+)/${1:/pascalcase}/} = connect(",
" mapStateToProps,",
" mapDispatchToProps",
")(${TM_FILENAME/^([^.]+)/${1:/pascalcase}/}Component);"
],
"description": "Creates a normal container for a normal component"
}
预期
// @flow
import { connect } from 'react-redux';
import { FunThingComponent } from './fun-thing.component';
...
实际
// @flow
import { connect } from 'react-redux';
import { FunThing.container.jsComponent } from './FunThing.container.js.component';
...
如您所见,它并没有忽略文件扩展名。
答案 0 :(得分:0)
这两项工作
"import { ${TM_FILENAME/^([^.]+).*/${1:/pascalcase}/}Component } from './${TM_FILENAME/^([^.]+).*/$1/}.component';",
"import { ${TM_FILENAME/(.*?)\\..+/${1:/pascalcase}/}Component } from './${TM_FILENAME/(.*?)\\..+/$1/}.component';"
如果要根据需要排除变量的一部分,使用vscode代码段转换,请从文件名中删除.component.js
,则该变量的那一部分必须在正则表达式-因此为(.*?)\\..+
。
否则,变量的“看不见的”部分将通过。
因此,您的正则表达式^([^.]+)
准确地捕获了第一个.
之前的文件名部分,但是其余变量未修改就“通过”了。
通过此示例,您可以更清楚地看到这一点:
"import { ${TM_FILENAME//${1:/pascalcase}/}Component }
产生:
import { fun-thing.component.jsComponent }
因此,尽管没有捕获任何文件名,但整个文件名都会通过。
${someVariable/everything To Be Transformed/what To Do To the previous/}
如果它不在“所有要转换的内容”部分中,则没有任何反应。