JavaScript使用ag-grid时如何实现非精确文本过滤
问题根因
你的过滤代码不生效是两个核心错误导致的:
- 用
==对比字符串和正则表达式对象,根本不会执行正则匹配逻辑,这个判断永远不会返回预期结果 - 正则写法错误:
/.'RTT'./里多余的点、单引号属于无效语法,完全无法实现“包含指定关键词”的匹配逻辑,更不支持多关键词匹配。
正确实现方式
基础包含匹配
要判断字符串是否包含指定关键词,要用正则实例的test()方法执行匹配,单关键词匹配的正确写法如下:
// 匹配所有Genre字段包含RTT的行 return /RTT/.test(node.data.Genre);
多关键词匹配
要支持RTT, RTS, Action这类任意关键词命中的需求,用正则的或逻辑符|拼接所有目标关键词即可:
// Genre包含RTT、RTS、Action任意一个关键词就命中过滤 return /RTT|RTS|Action/.test(node.data.Genre);
如果需要避免关键词片段误匹配(比如不想让RTT匹配到XRTTY这类拼接词),给正则加单词边界符\b:
return /\b(RTT|RTS|Action)\b/.test(node.data.Genre);
如果需要不区分大小写匹配,给正则加i修饰符即可,比如/RTT|RTS|Action/i。
修正后的完整过滤函数
function doesExternalFilterPass(node) { switch (status) { case 'released': return node.data.Status === 'Released'; case 'early-access': return node.data.Status === 'Early access'; case 'in-development': return node.data.Status === 'In development'; case 'rtt-strategy': return /\b(RTT|RTS|Action)\b/.test(node.data.Genre); default: return true; } }
动态关键词场景适配
如果后续关键词列表是动态变化的,不要手动写正则字面量,用RegExp构造函数动态生成,注意先转义关键词里的正则特殊字符避免报错:
// 动态关键词列表示例 const filterKeywords = ['RTT', 'RTS', 'Action']; // 正则特殊字符转义方法 const escapeRegExp = (str) => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // 生成匹配正则,i修饰符表示不区分大小写 const keywordReg = new RegExp(filterKeywords.map(escapeRegExp).join('|'), 'i'); // 过滤逻辑直接调用 return keywordReg.test(node.data.Genre);
内容的提问来源于stack exchange,提问作者Сергей Якушин
相关产品推荐
相关产品推荐

