【问题标题】:Regex Filtering Array正则表达式过滤数组
【发布时间】:2020-12-02 05:16:44
【问题描述】:

我在数组上使用正则表达式进行过滤,但我想修改它,以便即使有空格也可以搜索:

 transform(items: any, filter: any, defaultFilter: boolean): any {
    if (!filter){
      console.log(items);
      return items;
    }

    if (!Array.isArray(items)){
      return items;
    }

    if (filter && Array.isArray(items)) {
      let filterKeys = Object.keys(filter);

      if (defaultFilter) {
       
        return items.filter(item =>
            filterKeys.reduce((x, keyName) =>
                (x && new RegExp(filter[keyName], 'gi',).test(item[keyName],)) || filter[keyName] == "", true),);
      }
      else {
        return items.filter(item => {
          return filterKeys.some((keyName) => {
            return new RegExp(filter[keyName], 'gi').test(item[keyName]) || filter[keyName] == "";
          });
        });
      }
    }
  }
}

但我不确定如何添加 ('\s') 表达式以允许空格。

【问题讨论】:

  • 您可以尝试替换 item[keyName] 中的空格。类似item[keyName].replace(/\s/g, '')
  • 这会删除在 Angular 中以表格格式显示的整个项目数组

标签: javascript arrays regex filter


【解决方案1】:

接听@Sonu 的评论:

在将.test()filter[keyName] 一起应用之前,删除item[keyName] 中的所有空格:

...
return new RegExp(filter[keyName], 'gi').test(item[keyName].replace(/\s/g,''));
...

或者,如果您只想删除 周围的空白,您可以:

...
return new RegExp(filter[keyName], 'gi').test(item[keyName].trim());
...

【讨论】:

  • 不幸的是,如果我尝试这种方式,实际显示 Angular 中每个元素的表格的项数组都会消失。我只想能够搜索甚至包括空格,所以也许它需要以某种方式应用于 filter[keyName]
  • 您能给我们举几个您希望匹配或不匹配的键值 (filter[keyName]) 和目标字符串 (item[keyName]) 的示例吗?
  • 所以我过滤了两个属性(课程代码),示例字符串包括 4-8 位数字(例如“1021”、“3319”,我过滤的另一个属性是课程名称( "ANTHROPOLOGY FOR BEGINNERS") 和itek[keyname] 在每个课程的对象中包含这两个属性以及有关课程的许多其他属性。
  • 我会在哪些变量/属性中找到您的“课程代码”或“课程名称”?如果您可以编辑您的问题并在那里定义数组filterKeysitems(至少包含其中的一些元素),那将非常有帮助。你希望你的过滤如何工作?正面和负面...
  • 基本上,我需要做一个软搜索,所以即使有一些空格,即使 1-2 个字符是错误的,它也会匹配
猜你喜欢
  • 2011-04-17
  • 2013-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-06
  • 2012-11-15
  • 2015-03-21
相关资源
最近更新 更多