2016-07-12 4 views
2

私は、次の形式の文字列 "some_text_AAAABB_some_other_text"を持っています。文字列には任意の偶数の 'A'があり、 'BB'は 'A'に続く固定文字列です。 2n 'Aがあると仮定して、正規表現を使用して' Aの文字列 'Aの長さをnに置き換えたいとします。結果は正規表現を使って文字列の半分をマッチさせることも、マッチしたグループの半分を使うこともできますか?

"some_text_AABB_some_other_text" 

になり、次の文字列

"some_text_AAAABB_some_other_text" 

については

は、正規表現でこれを達成することも可能ですか?

私はV8 javascriptを使って変換を行っています。

+2

あなたが使用しているツール/プリグラミング言語は何ですか、Marcinie?また、 '' some_text_AAAAABB_some_other_text "'の期待される出力は? –

+0

「偶数」の数の「A」を照合するには、['(?:A {2})+'](https://regex101.com/r/oY8eF9/1)を使用することができます。 @WiktorStribiżewが指摘したように、* odd * occurencesで何が行われるのでしょうか? – Jan

+2

を '(A +)\ 1'にマッチさせ、マッチを' \ 1'で置き換えます。 – SilentMonk

答えて

2

1)Aの数が偶数、2)Aの数が奇数の2つのシナリオがあります。 A秒の偶数か奇数がある場合は、あなたが気にしない場合は

、ちょうど

replace(/(A+)\1BB/g, "$1BB") 

(A+)マッチを使用し、グループ1一つ以上Aできるだけ多くのとに取り込み、 \1は、同じ部分文字列(グループ1に取り込まれたのと同じ番号)に一致します。 BBは固定文字列なので、パターンにリテラルとして入れるだけです。あなたがAの奇数個の文字列を変更したくない場合は

は、あなたがここで

this regex demoは、最初のキャプチャグループはスタートをキャプチャを参照してください

replace(/(^|[^A-Z])(A+)\2BB/g, "$1$2BB") 

必要this regex demo

を参照してください。文字列^または以外の任意の文字の第2キャプチャグループのキャプチャ1以上A sであり、逆参照は今やID = 2 - \2が使用されます。

+0

まだ、奇数の 'A'シナリオは将来の読者にとっては有用かもしれないので、私はそのビットを追加しました。 –

関連する問題