我正在开发一个自动完成功能,其中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
。在正则表达式方面,我是一个完整的菜鸟。
非常感谢任何帮助。
答案 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