SuperAPI AI 工具集

js-hoist-regexp

编程与开发

查看项目

更新于 10-16 02:41

技能介绍

js-hoist-regexp 是一份面向 React 开发者的正则表达式优化规范,核心主张是:不要在 render 内部创建 RegExp 对象,而应将其提升到模块作用域,或用 useMemo() 进行记忆化。

用途 该规范适用于在 React 组件或频繁调用的函数中使用正则表达式的场景。它解决的问题是:每次渲染都会新建正则实例,带来不必要的创建开销,同时容易被误用为依赖频繁变化的动态正则。

主要能力 规范提供了两方面的指导。第一,针对静态正则,建议提升为模块级常量,例如将邮箱校验正则定义为 EMAIL_REGEX,避免在组件函数体内重复构造。第二,针对依赖 props 或 state 的动态正则,建议使用 useMemo() 并声明正确的依赖项,仅在依赖变化时重新构造正则。

使用方式 文档以错误与正确两种写法对比。错误示例中,Highlighter 组件在函数体内通过 new RegExp((${query}), 'gi') 构造正则,导致每次渲染都新建实例。正确示例提供了两种做法:一是像 EMAIL_REGEX 那样把正则提升到模块作用域;二是在动态场景下使用 useMemo(() => new RegExp((escapeRegex(query)), 'gi'), [query]) 进行记忆化,随后用 text.split(regex) 拆分文本并渲染。

注意事项 规范特别警告:带 g 标志的全局正则会维护可变的 lastIndex 状态。示例中,const regex = /foo/g 连续两次调用 regex.test('foo'),第一次返回 true 且 lastIndex 变为 3,第二次返回 false 且 lastIndex 归零。这意味着复用同一个全局正则对象时,匹配结果可能因上一次调用而改变,需要开发者留意。

适用场景 适合需要在 React 组件中做文本高亮、关键字匹配、输入校验(如邮箱格式)等使用正则的任务,也适用于会被高频调用的工具函数。

限制 该页面为一条针对正则创建时机的使用规范,未提供关于性能基准数据、具体版本要求、安装方式或兼容性说明,这些信息暂未提供。