How do I divide a camel case string in Ruby? -
i'm using ruby 2.4. want create new string camel-case string inserting spaces before capital letters. if have
abcdef
i want result of
abc def
whereas if have string of just
abcdef
then nothing should happen. string of
abcdefg
should result as
abc defg
i tried below
def format_camel_case_str(str) if str.present? && str.length > 1 && str !~ /[[:space:]]/ && !str.upcase.eql?(str) && str[0].upcase.eql?(str[0]) && str[1..str.length] =~ /[a-z]/ str = "#{str[0..(str.index(/[a-z]/) - 1)]} #{str[str.index(/[a-z]/)..str.length]}" end str end
but returns input twice. also, should consider case of string "aaabbbccc" (should "aaa bbb ccc").
this 1 little bit harder read, since it's regex, example cases can done with:
gsub(/(?<!\a)(?<char>[a-z])(?=[a-z])/, ' \k<char>') ['abcdef', 'abcdef', 'abcdefg', 'aaabbbccc'].each |str| puts "#{str} => #{str.gsub(/(?<!\a)(?<char>[a-z])(?=[a-z])/, ' \k<char>')}" end # abcdef => abc def # abcdef => abcdef # abcdefg => abc defg # aaabbbccc => aaa bbb ccc
regex explanation: (?<!\a)
negative lookbehind, ensuring previous character not start of string. (?<char>[a-z])
matches , captures uppercase character match group named 'char'. (?=[a-z])
positive lookahead make sure next character lowercase.
so, because of positive lookahead, you'll match uppercase character comes before lowercase character, , negative lookbehind ensures uppercase not @ start of string.
the second parameter gsub
replacement string, space followed whatever captured match group 'char'
Comments
Post a Comment