Ruby

[Ruby] String#split でセパレータも結果に含める


問題

'mono,di,tri'.split(',') #=> ["mono", "di", "tri"]

この結果を ["mono", ",", "di", ",", "tri"] にするにはどうしたらよいか?


解答

'mono,di,tri'.split(/(,)/) #=> ["mono", ",", "di", ",", "tri"]

String#split のドキュメントに


split(sep = $;, limit = 0) -> [String]

sep が正規表現で、かつその正規表現に括弧が含まれている場合には、 各括弧のパターンにマッチした文字列も配列に含まれます。 括弧が複数ある場合は、マッチしたものだけが配列に含まれます。


と記載されている。今日まで知らなかった小ネタ :ghost: