除了使用 TM_FILENAME_BASE 之外,还有什么方法可以 trim a TM_FILENAME 吗?
Is there a way to trim a TM_FILENAME beyond using TM_FILENAME_BASE?
我正在尝试为 redux 容器文件创建一个片段,该文件需要导入一些具有相同基本名称的反应文件。 TM_FILENAME_BASE 非常适合从文件名中删除 .js,但在这种情况下,我的组件文件的扩展名是 fun-thing.component.js 并且容器将采用 fun-[=28= 的扩展名].
我使用的正则表达式 select 第一个句点之前的所有内容是 ^([^.]+)
"Redux Container": {
"prefix": "rc",
"body": [
"// @flow",
"import { connect } from 'react-redux';",
"import { ${TM_FILENAME/^([^.]+)/${1:/pascalcase}/}Component } from './${TM_FILENAME/^([^.]+)//}.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';
...
如您所见,它并没有省略文件扩展名。
这两个都有效:
"import { ${TM_FILENAME/^([^.]+).*/${1:/pascalcase}/}Component } from './${TM_FILENAME/^([^.]+).*//}.component';",
"import { ${TM_FILENAME/(.*?)\..+/${1:/pascalcase}/}Component } from './${TM_FILENAME/(.*?)\..+//}.component';"
使用 vscode 片段转换,如果您想 排除 部分变量,从文件名中删除 .component.js
,那么变量的一部分必须在正则表达式中说明 - 因此 (.*?)\..+
.
否则"unseen"部分变量正好通过。
因此您的正则表达式 ^([^.]+)
准确地捕获了第一个 .
之前的文件名部分,但随后变量的其余部分 "passing through" 未修改。
你可以通过这个例子更清楚地看到这一点:
"import { ${TM_FILENAME//${1:/pascalcase}/}Component }
产生:
import { fun-thing.component.jsComponent }
所以整个文件名都通过了,尽管 none 被捕获了。
${someVariable/everything To Be Transformed/what To Do To the previous/}
如果它不在 "everything to be transformed" 部分,则不会发生任何事情。
我正在尝试为 redux 容器文件创建一个片段,该文件需要导入一些具有相同基本名称的反应文件。 TM_FILENAME_BASE 非常适合从文件名中删除 .js,但在这种情况下,我的组件文件的扩展名是 fun-thing.component.js 并且容器将采用 fun-[=28= 的扩展名].
我使用的正则表达式 select 第一个句点之前的所有内容是 ^([^.]+)
"Redux Container": {
"prefix": "rc",
"body": [
"// @flow",
"import { connect } from 'react-redux';",
"import { ${TM_FILENAME/^([^.]+)/${1:/pascalcase}/}Component } from './${TM_FILENAME/^([^.]+)//}.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';
...
如您所见,它并没有省略文件扩展名。
这两个都有效:
"import { ${TM_FILENAME/^([^.]+).*/${1:/pascalcase}/}Component } from './${TM_FILENAME/^([^.]+).*//}.component';",
"import { ${TM_FILENAME/(.*?)\..+/${1:/pascalcase}/}Component } from './${TM_FILENAME/(.*?)\..+//}.component';"
使用 vscode 片段转换,如果您想 排除 部分变量,从文件名中删除 .component.js
,那么变量的一部分必须在正则表达式中说明 - 因此 (.*?)\..+
.
否则"unseen"部分变量正好通过。
因此您的正则表达式 ^([^.]+)
准确地捕获了第一个 .
之前的文件名部分,但随后变量的其余部分 "passing through" 未修改。
你可以通过这个例子更清楚地看到这一点:
"import { ${TM_FILENAME//${1:/pascalcase}/}Component }
产生:
import { fun-thing.component.jsComponent }
所以整个文件名都通过了,尽管 none 被捕获了。
${someVariable/everything To Be Transformed/what To Do To the previous/}
如果它不在 "everything to be transformed" 部分,则不会发生任何事情。