Visual studio code 除了使用TM_FILENAME_BASE外,还有什么方法可以修剪TM_文件名吗?

Visual studio code 除了使用TM_FILENAME_BASE外,还有什么方法可以修剪TM_文件名吗?,visual-studio-code,vscode-snippets,Visual Studio Code,Vscode Snippets,我正在尝试为一个redux容器文件创建一个代码段,该文件导入了一些具有相同基本名称的react文件。TM_FILENAME_BASE可以很好地从文件名中删除.js,但在本例中,我的组件文件的扩展名是fun-thing.component.js,容器的扩展名是fun-thing.container.js 我用来选择第一个句点之前的所有内容的正则表达式是^([^.]+) 期望 // @flow import { connect } from 'react-redux'; import { FunTh

我正在尝试为一个redux容器文件创建一个代码段,该文件导入了一些具有相同基本名称的react文件。TM_FILENAME_BASE可以很好地从文件名中删除.js,但在本例中,我的组件文件的扩展名是fun-thing.component.js,容器的扩展名是fun-thing.container.js

我用来选择第一个句点之前的所有内容的正则表达式是
^([^.]+)

期望

// @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/^([^.]+).*/$1/}.component';",

  "import { ${TM_FILENAME/(.*?)\\..+/${1:/pascalcase}/}Component } from './${TM_FILENAME/(.*?)\\..+/$1/}.component';"
使用vscode代码段转换,如果您希望根据需要排除部分变量,从文件名中删除
.component.js
,则必须在正则表达式中说明该部分变量-因此
(.*?\ \ \ \…+

否则,变量的“看不见”部分就会通过

因此,您的regex
^([^.]+)
准确地捕获了第一个
之前的文件名部分,但随后变量的其余部分未经修改就“通过”

通过以下示例,您可以更清楚地看到这一点:

"import { ${TM_FILENAME//${1:/pascalcase}/}Component }
这将产生:

import { fun-thing.component.jsComponent }
因此,虽然没有捕获到任何文件名,但会传递整个文件名

${someVariable/everything To Be Transformed/what To Do To the previous/}

如果它不在“一切都要改变”部分,它就不会发生任何事情

谢谢!我实现了第一个,它成功了。你所说的看不见的部分完全有道理。
${someVariable/everything To Be Transformed/what To Do To the previous/}