DEV Community

Pau Riosa
Pau Riosa

Posted on

1 1

Elixir Regex: How to put an underscore between a letter and a number?

Intro

Today I've been struggling on transforming a camelCase word combined with a number to become a snake_case atom

"helloWorld30" -> :hello_world_30
Enter fullscreen mode Exit fullscreen mode

I tried using Macro.underscore/1 before and found out that I should not use it to manipulate strings to add underscore.

...Do not use it as a general mechanism for underscoring strings as it does not support Unicode or characters that are not valid in Elixir identifiers.

elixir docs

That's why I used Inflex: An Elixir library for handling word inflections

iex) "helloWorld30" 
|> Inflex.underscore()

iex) "hello_world30"
Enter fullscreen mode Exit fullscreen mode

Someone Helped Me Please!

But still using Inflex alone cannot show the output that I want.

Luckily I asked to the community and thank God someone helped me.

Shout out to Karl Seguin 🚀.

He come up on suggesting using RegEx module.

Here is the RegEx that he gave.

iex) Regex.replace(~r/([A-Za-z])(\d)/, "Hello World9000", "\\1_\\2") 

iex) "Hello World_9000"
Enter fullscreen mode Exit fullscreen mode

My Own Version

With another version using String module.


iex) "helloWorld30    
|> String.replace(~r/(\D)(\d)/, "\\1_\\2")

iex) "helloWorld_30"

Enter fullscreen mode Exit fullscreen mode

Overall output

To transform a camelCase word together with a number to become a snake_case atom:

iex) "helloWorld30" 
|> Inflex.underscore() 
|> String.replace(~r/(\D)(\d)/, "\\1_\\2")
|> String.to_atom()


iex) "hello_world_30"
Enter fullscreen mode Exit fullscreen mode

Happy coding!

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs