Ruby で CamelCase 文字列を部分文字列に分割するにはどうすればよいでしょうか? 質問する

Ruby で CamelCase 文字列を部分文字列に分割するにはどうすればよいでしょうか? 質問する

ImageWideNiceまたはのような CamelCase 文字列があります。ここで、その文字列を 、または、または などのImageNarrowUgly部分文字列に分割したいと思います。ImageWideNarrowNiceUgly

私はこれを単純に解決できると思った

camelCaseString =~ /(Image)((Wide)|(Narrow))((Nice)|(Ugly))/

しかし不思議なことに、これは と のみを埋めます$1$2、 は埋めません$3

その文字列を分割するためのより良いアイデアはありますか?

ベストアンサー1

s = 'nowIsTheTime'

s.split /(?=[A-Z])/

=> ["now", "Is", "The", "Time"]

?=patternは、ポジティブな先読み。基本的には文字列の直前のポイントと一致しますパターン。文字を消費しない、つまり含まれないパターン試合の一部として。別の例:

    irb> 'streets'.sub /t(?=s)/, '-'
=> "stree-s"

この場合はs一致しますが(2番目だけがt一致します)、置換されません。ブライスそして彼の正規表現ドキュメントのリンク。ブライス・アンダーソンは次のように説明を加えている。

マッチグループ?=の先頭は()ポジティブな先見性、これは、正規表現が一致するかどうかを判断する際に文字を見ている間、それらの文字を一致の一部にはしないということを単に言っているだけです。split()通常は中間の文字を消費しますが、この場合は一致自体が空なので、[そこには]何もありません。

おすすめ記事