正则表达式过滤器angular2

时间:2017-04-11 11:43:43

标签: javascript regex angular

我正在开发一个自动完成功能,其中regex已用于过滤。过滤器代码目前如下:

filterStates(val: string) {
    return val ? this.states.filter(s => new RegExp(`^${val}`, 'gi').test(s.name))
               : this.states;
  }

}

以上regex适用于数据结构,如:

states=[{"name":"Alaska",code:1234},
{"name":"Bulgaria",code:12345},
{"name":"Colarado",code:12346},
{"name":"New Jersey",code:12347},
]

继承人的工作人员:https://plnkr.co/edit/Pf2pWeUYo2mt7VzwCDs2?p=preview

但现在数据结构略有变化,如下面的name所示:

 states=[{"name":"Alaska (AL)","code":1234},
{"name":"Bulgaria (BG)","code":12345},
{"name":"Colarado (CO)","code":12346},
{"name":"New Jersey (NJ)","code":12347},
]

我无法弄清楚如何为regex生成name。在正则表达式方面,我是一个完整的菜鸟。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

使用此正则表达式提取州名称(无需修剪):^[\w ]+(?= \()

Alaska(AL)=>匹配阿拉斯加

Bulgaria(BG)=>匹配保加利亚

新泽西州(新泽西州)=>匹配新泽西州

这是regex101上的demo

其他可能性,当您键入

时将匹配状态

替换

return val ? this.states.filter(s => new RegExp(`^[\w ]+(?= \()`, 'gi').test(s.name))
          : this.states;

return val ? this.states.filter(s => (s && s.name && s.name.toLowerCase().substring(0, val.length) === val))
           : this.states;

Here是一名傻瓜,尝试输入 a 然后 l