如何实现正则匹配文本但空正则时不匹配?能否移除判断语句?
findElementsByText函数的实现抉择
能不能用正则实现“空text时不匹配任何元素”?
可以,但属于绕弯子的写法。比如当text为空时,生成一个永远匹配失败的正则,比如/^(?!.*)/或者/^(?!!)/,这样不管元素的文本内容是什么,都匹配不上。但这种正则写法非常不直观,除非注释写得特别清楚,否则其他开发者看代码时得花时间琢磨这正则到底干嘛用的。
保留判断语句还是用正则处理?选前者更优
直接保留if (!text) return [];的判断逻辑要好得多,原因有三个:
- 可读性拉满:一眼就能看懂空输入的处理规则,不用去抠正则的特殊语法。
- 性能更高效:空输入直接返回空数组,跳过了正则编译、遍历元素匹配这些后续流程,少做无用功。
- 维护成本低:哪天需求变了(比如空text要返回所有元素),直接改判断逻辑就行,不用碰正则的部分。
要是硬要靠正则实现,示例代码大概是这样:
const pattern = text ? new RegExp(text, 'gi') : /^(?!)/; // 空text用永不匹配的正则
但这种写法完全没必要,属于为了去掉一行判断而增加理解成本,得不偿失。
内容的提问来源于stack exchange,提问作者wyc
相关产品推荐
相关产品推荐

