You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则匹配对象键中的pop/pops单词(解决下划线场景失效问题)

解决JavaScript对象键匹配含pop/pops的问题

嘿,我知道你卡在正则匹配的问题上了!你之前用的/\b(pop|pops)\b/之所以匹配不到time_pop、home_pops这类键,核心原因是正则里的\b单词边界不识别下划线作为分隔符——因为下划线_属于正则的「单词字符」(和字母、数字归为一类),所以time_pop里的_和p都是单词字符,\b不会认为这是一个边界,自然就匹配不到后面的pop了。

修正后的正则方案

我们需要调整正则,让它能识别下划线分隔的pop/pops,同时也能匹配单独的pop/pops键。这里推荐使用正向/反向预查来界定匹配范围:

const expr = /(?<=^|_)pop(?:s)?(?=_|$)/;

正则拆解

让我解释下这个正则各部分的作用:

  • (?<=^|_):反向预查,确保pop/pops的前面要么是字符串开头(^),要么是下划线(_)
  • pop(?:s)?:匹配pop或者pops,(?:s)?是一个非捕获组,表示s是可选的(不需要捕获这个s单独处理)
  • (?=_|$):正向预查,确保pop/pops的后面要么是下划线(_),要么是字符串结尾($)

完整使用示例

把这个正则用到你的代码里,就能得到想要的筛选结果了:

const obj = { 
  time_pop: 'fhfvla', 
  icon: 'dsfval', 
  home_pops: 'valffg', 
  title: 'sdfsdfs', 
  pop: 'sfsdfsd', 
  rattle: 'sdfdsf', 
  pops: 'sfsdfsdf' 
};

const expr = /(?<=^|_)pop(?:s)?(?=_|$)/;
const filteredEntries = Object.entries(obj).filter(([key]) => expr.test(key));

console.log(filteredEntries);
// 输出结果:
// [
//   ["time_pop", "fhfvla"],
//   ["home_pops", "valffg"],
//   ["pop", "sfsdfsd"],
//   ["pops", "sfsdfsdf"]
// ]

补充说明

如果你的键里还有其他分隔符(比如短横线-),只需要把正则里的_换成[-_]就可以了,比如:

const expr = /(?<=^|[-_])pop(?:s)?(?=[-_]|$)/;

这样就能兼容下划线和短横线分隔的场景啦!

内容的提问来源于stack exchange,提问作者me-me

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:25:25