If I have a string such as \"aabbbbccffffdeffffgg\"
and I wanted to split the string into this array: [\"aa\", \"bbbb\", \"cc\", \"ffffd\", \"e\", \"ffff\", \
Here is a non-regexp version
str = "aabbbbccffffdeffffgg"
p str.chars.chunk(&:itself).map{|x|x.last.join} #=> ["aa", "bbbb", "cc", "ffffd", "e", "ffff", "gg"]
You can use a regex with a back reference and the scan()
method:
str = "aabbbbccffffdeffffgg"
groups = []
str.scan(/((.)\2*)/) { |x| groups.push(x[0]) }
groups
will look like this afterwards:
["aa", "bbbb", "cc", "ffffd", "e", "ffff", "gg"]