Вы не хотите scan
для этого, так как это имеет мало смысла. Вы можете использовать String#match
, который вернет объект MatchData
, затем вы можете вызвать #captures
, чтобы вернуть массив захватов. Как то так:
#!/usr/bin/env ruby
string = "RyanOnRails: This is a test"
one, two, three = string.match(/(^.*)(:)(.*)/i).captures
p one #=> "RyanOnRails"
p two #=> ":"
p three #=> " This is a test"
Имейте в виду, что если совпадение не найдено, String#match
вернет ноль, поэтому что-то вроде этого может работать лучше:
if match = string.match(/(^.*)(:)(.*)/i)
one, two, three = match.captures
end
Хотя scan
имеет мало смысла для этого. Он все еще выполняет свою работу, вам просто нужно сначала сгладить возвращенный массив. one, two, three = string.scan(/(^.*)(:)(.*)/i).flatten