ImageWideNice
またはのような CamelCase 文字列があります。ここで、その文字列を 、または、または などのImageNarrowUgly
部分文字列に分割したいと思います。Image
Wide
Narrow
Nice
Ugly
私はこれを単純に解決できると思った
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()
通常は中間の文字を消費しますが、この場合は一致自体が空なので、[そこには]何もありません。