function snakecase(str)
str = replace(str, r"(?<a>[a-z])(?<b>[A-Z])" => s"\g<a>_\g<b>")
str = replace(str, "-" => "_")
str = replace(str, r"\s+" => "_")
return lowercase(str)
end
snakecase("FOOBAR") # => foobar
snakecase("FOO-BAR") # => foo_bar
snakecase("FooBAR") # => foo_bar
snakecase("foo Bar") # => foo_bar
replace
関数で置換する際は、(?<name>)
でキャプチャして、\g<name>
で展開する。