正则改造VS Code里React类组件的自定义snippet

本文介绍了如何使用正则表达式改造VS Code的React类组件snippet,使其能根据当前文件名自动生成类名。通过参考教程并解决路径与文件名匹配的问题,实现了针对单文件和文件夹组件的智能类名生成。尽管类名可有可无,但作者借此机会复习了正则表达式,并分享了实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我目前都习惯用 JS JSX Snippets 这个 VS Code 插件来快速编写 React 组件,然后发现快速生成类组件的 rcc 其中的类名可以跟着当前文件名自动变化,于是就研究了一下。

最后找到这篇非常棒的教程 https://blog.youkuaiyun.com/maokelong95/article/details/54379046 ,讲解得非常清楚。

但是,还有点细节让我的强迫症不爽:有些组件直接用一个JS文件,如 App.js ,这样里面使用 rcc 能自动生成 App 这个类名,但是,还有很多组件是用一个文件夹的,因为它的样式、以及一些子组件要放一起,如 \News\index.js ,这时使用 rcc 就只能生成 index 这个不合适的类名了,但显然我想要的是 News 做类名。

看到 snippets 变量转换的语法里,可以使用正则提取,并进一步格式化,那正好我复习一下正则,开搞。

期间各种心酸苦楚就不赘述了。就是发现只有占位符可以嵌套,可选项不能嵌套,变量转换的 if else 输出语法也不能嵌套,哎。。。最后思路改为,分别对 文件名 和 路径 进行正则匹配和提取,如果是 大写开头的 就提取成功,否则就只输出空格。所以代码风格很重要,组件就该用 Pascal 命名法。

// C:\Users\用户名\AppData\Roaming\Code\User\snippets\rcc.code-snippets 文件

{
	"React Class Component": {
		"scope": "javascript,typescript",
		"prefix": "rcc",
		"body": [
			"import React, { Component } from 'react';\n",
			"export default class ${1:${TM_FILENAME_BASE/(^[A-Z]\\w*$)/${1:- }/}}${2:${TM_DIRECTORY/^[C-H]:\\\\[\\S ]+\\\\([A-Z]\\w*)$/${1:- }/}} extends Component {",
			"  render () {",
			"    return (",
			"      <div>",
			"        ${3:${TM_FILEPATH/^[C-H]:\\\\[\\S ]+(\\\\src\\\\\\S+)$/$1/}}",
			"      </div>",
			"    );",
			"  }",
			"}\n"
		],
		"description": "生成React类组件"
	}

}

如果 文件名 和 目录名 都是大写开头,也没事,毕竟是嵌套在占位符里的,按 Tab 键可以快速定位,二选一,再按一下退格键就删了,也是因此两种类名的占位符之间我都没留空格,哈哈哈

稍微解释一下为什么那么多反斜杠 \ ,因为这是字符串,VS Code读取的时候就会进行转义一次,然后才是正则里需要的转义,所以就 4个 \ 才表示匹配一个 \ 。当然,我这正则不一定考虑的很周全,才疏学浅。

最后,也是最重要的,其实这个类名是无所谓的,可有可无,随便叫啥,我只是满足一下自己的细节强迫症,以及复习一下正则,万一有大佬看到此文,还请轻喷哈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值