3

次のような一連の文字列があります。

foobar | ABC Some text 123
barfoo | DEF Some te 456

そして、結果が得られるようにマスクしたい

ABC123
DEF456

それぞれ。間のテキストは常に、Some text潜在的に数字を含む可能性のある部分文字列になります (例:S0m3 t3xtまたはS0m3 t3)。常に左から始まる部分文字列になるため、me te.

明らかに、次のようなもので正規表現を開始する必要があります

(?<=| )[A-Z]{3}

これでわかりましたが、文字列の最後にある数字を効果的に連結する方法がわかりABCません。DEF

単一の式でこれを行う方法はありますか?

4

2 に答える 2

2

http://regexr.com?375u8を参照してください。

(?<=| )([A-Z]{3}).*(\d{3})

これにより、AZ の範囲内の 3 文字と 2 つのキャプチャ グループ内の 3 つの数字が得られ、これらのグループを使用して両方を連結して目的の出力を得ることができます。$1$2

これは、間Some textに 3 つの数字が含まれている場合でも機能します。

すべてを両方のキャプチャ グループに置き換えたい場合.*は、正規表現の前に追加します。

.*(?<=| )([A-Z]{3}).*?(\d{3})
于 2013-11-13T10:38:08.367 に答える
1

別の JavaScript バージョン

[
 'foobar | ABC Some text 123',
 'barfoo | DEF Some te 456'
].map(function(v) { 
  return v.replace(/^.*\| ([A-Z]{3}) .* (\d{3})$/, '$1$2'); 
})

与える

["ABC123", "DEF456"]
于 2013-11-13T10:43:33.163 に答える