2017-04-11 5 views
0

私はregexがフィルタリングに使用されているオートコンプリート機能に取り組んでいます。フィルタコードは、現在、以下の通りです:regex以上正規表現フィルタangular2

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

} 

は次のようなデータ構造のためにうまく働いた:

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

相続人の作業plunker: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}, 
] 

nameregexを生成する方法についてはわかりません。私は正規表現になると完全なnoobです。

ご協力いただければ幸いです。状態名(トリミングする必要はありません)を抽出する

+0

このパターンは機能しません。通常の文字検索も妨げられます。 –

+0

REGEXを使用する必要がありますか?カスタムパイプで簡単に行うことができます。 –

+0

@WiktorStribiżewはい、ただ見ました。動いていない。 –

答えて

0

使用この正規表現:^[\w ]+(?= \()

アラスカ(AL)=>試合アラスカ

ブルガリア(BG)=>試合ブルガリア

ニュージャージー(NJ)=>試合ニュージャージー

はこちらです

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

Here

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

がplunkerがあるregex101上

その他あなたが

を入力するときの状態と同じになります可能性を置き換え、その後、を入力しようl

+0

これは 'name'とまったく同じです。しかし、プランターでは動作しないようです:https://plnkr.co/edit/Pf2pWeUYo2mt7VzwCDs2?p = preview –

+0

これを実現する別の方法を追加しました(デモプランナーを使用) –