javascript - 使用不区分大小写的正则表达式从 JS 数组中过滤和删除项目
问题描述
在给定的数组上:
const arr = [
{ fn: "Steve", ln: "Jobs" },
{ fn: "Dennis", ln: "Rodman" },
{ fn: "Karl", ln: "Malone" },
{ fn: "Vince", ln: "Carter" },
{ fn: "Steve", ln: "King" }
];
如果我想返回一个不包括任何名为 Steve 的新数组,我可以运行:
const filteredArr = arr.filter(obj => obj.fn != "Steve");
如果不使用toLowerCase()
,在史蒂夫姓名可能是小写或大写的情况下,我如何编写正则表达式来获得相同的结果?
{ fn: "Steve", ln: "Jobs" },
{ fn: "Dennis", ln: "Rodman" },
{ fn: "Karl", ln: "Malone" },
{ fn: "Vince", ln: "Carter" },
{ fn: "steVe", ln: "King" },
{ fn: "STEVE", ln: "Jordan" },
{ fn: "steve", ln: "Clark" },
解决方案
RegExp.test()
使用方法检查字符串,并在正则表达式中使用i
标志(忽略大小写)。
注意:如果您想要完全匹配,即忽略包含名称的字符串 - 例如“steven” - 您可以使用^steve$
(参见边界)。
const arr = [{"fst":"Steve","snd":"Jobs"},{"fst":"Dennis","snd":"Rodman"},{"fst":"Karl","snd":"Malone"},{"fst":"Vince","snd":"Carter"},{"fst":"steVe","snd":"King"},{"fst":"STEVE","snd":"Jordan"},{"fst":"steve","snd":"Clark"}];
const pattern = /steve/i; // or /^steven$/i
const result = arr.filter(obj => !pattern.test(obj.fst));
console.log(result);
您可以使用 RegExp 构造函数使其可重用:
const arr = [{"fst":"Steve","snd":"Jobs"},{"fst":"Dennis","snd":"Rodman"},{"fst":"Karl","snd":"Malone"},{"fst":"Vince","snd":"Carter"},{"fst":"steVe","snd":"King"},{"fst":"STEVE","snd":"Jordan"},{"fst":"steve","snd":"Clark"}];
const removeItem = (arr, str, key = 'fst') => {
const pattern = new RegExp(str, 'i'); // or new RegExp(`^${str}$`, 'i')
return arr.filter(obj => !pattern.test(obj[key]));
};
const result = removeItem(arr, 'steve');
console.log(result);
推荐阅读
- snowflake-cloud-data-platform - 从字符串数组中获取列名并使用它来更改 SQL 表
- typescript - 通用接口中的通用原型函数?大批
。通过...分组 (道具):{键:K,数组:T[]}[] - verilog - 由于方向声明导致编译代码错误
- r - R中geom_sf覆盖shapefile时单位错误> 0
- caching - 缓存和缓存失效不起作用 GCP Cloud CDN
- swift - Swift - JSONSerialization 无效的 JSON
- facebook-graph-api - Facebook Graph API - 是否有用户 ID?我们想看看用户浏览了我们的每个页面多少次?
- powerbi - 周期的 PowerBI 动态过滤器
- kubernetes - Kubernetes 本地 PV 和 PVC 比实际磁盘大?
- c - 如何向 mingw-w64 添加自定义库(例如 glew)?