TypeScript过滤器数组匹配正则表达式

时间:2019-05-20 08:41:25

标签: arrays regex angular typescript filter

我正在尝试基于一组正则表达式表达式过滤数组。如果数组中的项目与任何正则表达式表达式匹配,我希望将其推送到另一个数组。我读到可以使用match()和test()来执行此操作,但是我不知道如何执行此操作。请帮助。谢谢。

这是我的正则表达式exp:

RAM-HEXA-*F-Q1
RAM-D-AT44-*-Q2
RAM-D-AT44-*-Q3

我的测试Arr:

testData={
[
        { value: 'RAM-HEXA-34F-Q1
' },
        { value: 'RAM-D-AT44-AQ-Q2
' },
        { value: 'RAM-D-AT44-ZS-Q3
' },
        { value: 'RAM-D-N7-9-Q3
' },
       { value: 'RAM-QUATRA-1F-Q1
' },
        { value: 'RAM-X-AT44-T-Q2
' }
      ]
}

所以基本上,我试图从testData中获取与reg表达式匹配的项。所以我试图得到一个看起来像这样的结果数组:

filteredData={
[
        { value: 'RAM-HEXA-34F-Q1
' },
        { value: 'RAM-D-AT44-AQ-Q2
' },
        { value: 'RAM-D-AT44-ZS-Q3
' }]

2 个答案:

答案 0 :(得分:0)

您可以使用过滤器数组方法:

var regex1 = RegExp('RAM-HEXA-*(F-Q1)?');
var filtered = testData.filter((x) = > 
{
return regex1.test(x.value);
})

与其他条件相同。

这是jsfiddle https://jsfiddle.net/3dgvw7yh/

中的示例

答案 1 :(得分:0)

这是测试它的代码。请注意,您的所有正则表达式都不匹配您的数据,因此结果为空数组。

const regexes = [
  'RAM-HEXA-*F-Q1',
  'RAM-D-AT44-*-Q2',
  'RAM-D-AT44-*-Q3',
];

const data = [
  { value: 'RAM-HEXA-34F-Q1' },
  { value: 'RAM-D-AT44-AQ-Q2' },
  { value: 'RAM-D-AT44-ZS-Q3' },
  { value: 'RAM-D-N7-9-Q3' },
  { value: 'RAM-QUATRA-1F-Q1' },
  { value: 'RAM-X-AT44-T-Q2' }
];

const filtered = data.filter(item => regexes.some(regex => item.value.match(regex)));

console.log(filtered);