1

次のような文字列があるとします

"item:(one|two|three), item2:(x|y)"

それを「因数分解」できる単一の正規表現はありますか

"item:one, item:two, item:three, item2:x, item2:y"

それとも、分割とループに頼る必要がありますか?

もし私がそれを分割しなければならないなら、どうやって私はそれを変えるのですか

"item:(one|two|three)"

の中へ

"item:one, item:two, item:three"

かっこの間の量が可変の場合は? このような問題に正規表現は役に立たないのでしょうか?

4

1 に答える 1

6

コールバック関数でそれを行うことができます:

 str = str.replace(/(\w+):\(([^)]*)\)/gi, function(match,item,values)
     {return item + ':' + values.split("|").join(', '+item+':')}
 );

すべての項目について、正規表現の最初の括弧は項目の名前 (つまりitem) をキャプチャし、2 番目の (エスケープされていない) 括弧のセットはすべての値の文字列 (つまりone|two|three) をキャプチャします。後者は で分割され|て結合, itemname:され、結果の先頭に別の項目名が追加されます。

これはおそらく、正規表現を組み合わせてデータを見つけ、分割して結合して新しい正規表現を構築する最も簡単な方法です。簡単ではない問題は、one|two|three異なるキャプチャ グループで任意の数の連続した値 ( ) をキャプチャできないことです。個別にキャプチャしようとすると、最後の 1 つしか取得できません。

于 2012-10-25T08:34:48.663 に答える