Curiosidad en String.split en Ruby
No lo veo destacado en la documentación, por lo que no debería fiarme de este comportamiento, pero quizá es útil para algo:
irb(main):001:0> "abc,def,ghi,jkl".split(',')
=> ["abc", "def", "ghi", "jkl"]
irb(main):002:0> "abc,def,ghi,jkl".split(/,/)
=> ["abc", "def", "ghi", "jkl"]
irb(main):003:0> “abc,def,ghi,jkl”.split(/(,)/)
=> ["abc", ",", "def", ",", "ghi", ",", "jkl"]
Vale, la primera línea está puesta por completitud: se utiliza una cadena con una coma para separar ciertas letras separadas por comas. Las dos línea siguientes son las interesantes: en la primera se utiliza un patrón Regexp de una coma, y el resultado es el mismo que el de la primera línea (lo que era de esperar); en la segunda línea se encierra la coma del patrón en un grupo de captura y Ruby nos devuelve el Array con el resultado intercalado con el grupo capturado.
Más ejemplos:
irb(main):004:0> "abc.,cde.,efg.,ghi".split(/.(,)/)
=> ["abc", ",", "cde", ",", "efg", ",", "ghi"]
irb(main):005:0> "abc.,cde.,efg.,ghi".split(/(.)(,)/)
=> ["abc", ".", ",", "cde", ".", ",", "efg", ".", ",", "ghi"]
irb(main):006:0> "abc.,cde.,efg.,ghi".split(/(.(,))/)
=> ["abc", ".,", ",", "cde", ".,", ",", "efg", ".,", ",", "ghi"]
irb(main):007:0> "abc.,cde.,efg.,ghi".split(/(.(,))/, 2)
=> ["abc", ".,", ",", "cde.,efg.,ghi"]
irb(main):008:0> "abc.,cde.,efg.,ghi".split(/(.(,))/, 3)
=> ["abc", ".,", ",", "cde", ".,", ",", "efg.,ghi"]
En esa lista de ejemplos se puede ver que cada grupo de captura acaba en el Array de resultados como un elemento independiente y que las partes del patrón que no están dentro de grupos de captura no aparecen entre los resultados. Además los grupos capturados no cuentan para el valor de limit.
No le encuentro utilidad alguna por ahora, pero parece muy completo para que esté puesto ahí por accidente ¿no?

