RosettaCodeData/Task/Camel-case-and-snake-case/Lua/camel-case-and-snake-case-1.lua
2023-07-01 13:44:08 -04:00

26 lines
1.3 KiB
Lua

local function escapeForPattern(str)
return (str:gsub("[-+*^?$.%%()[%]]", "%%%0"))
end
local function toCamelCase(str, separator)
local escapedSeparator = escapeForPattern(separator)
local namePattern = "%l%w*"..escapedSeparator.."[%w"..escapedSeparator.."]*%w" -- Starting with a lower case character and containing the separator character.
local separatorPattern = escapedSeparator.."(%w)" -- Discard the separator and capture the alphanumeric character.
return (str:gsub(namePattern, function(name)
return (name:gsub(separatorPattern, string.upper)) -- The captured character will be the one argument for string.upper().
end))
end
local function fromCamelCase(str, separator)
local namePattern = "%l+[%u%d]%w*" -- Starting with a lower case character and containing an upper case character or digit.
local separatorPattern1 = "(%l)([%u%d])" -- Lower case character followed by upper case character or digit.
local separatorPattern2 = "(%d)(%a)" -- Digit followed by alphanumeric character.
return (str:gsub(namePattern, function(name)
return (name
:gsub(separatorPattern1, function(char1,char2) return char1..separator..char2:lower() end)
:gsub(separatorPattern2, function(char1,char2) return char1..separator..char2:lower() end)
)
end))
end