エリクサーregex:どのように文字と数字の間にアンダースコアを置くには?


イントロ


今日、私はcamelCase word combined with a numberになるためにsnake_case atomを変えることに苦労していました
"helloWorld30" -> :hello_world_30
私は以前242479142を使用して、アンダースコアを追加するために文字列を操作するためにそれを使用しないでください.

...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


それが私がMacro.underscore/1を使用した理由です
iex) "helloWorld30" 
|> Inflex.underscore()

iex) "hello_world30"

誰かが私を助けてください!


しかし、まだInflex: An Elixir library for handling word inflectionsだけを使用して、私が欲しい出力を見ることができません.
幸いにも、私はコミュニティに尋ねて、誰かが私を助けたことを神に感謝します.Inflexまで叫ぶ🚀.
彼はKarl Seguinモジュールを使用して提案しています.
ここでは彼が与えた正規表現です.
iex) Regex.replace(~r/([A-Za-z])(\d)/, "Hello World9000", "\\1_\\2") 

iex) "Hello World_9000"

私自身のバージョン

RegExモジュールを使用して別のバージョンで.

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

iex) "helloWorld_30"

全体出力


Camelcaseの単語を数と一緒に変換し、SnakeRankケースAtomになります.
iex) "helloWorld30" 
|> Inflex.underscore() 
|> String.replace(~r/(\D)(\d)/, "\\1_\\2")
|> String.to_atom()


iex) "hello_world_30"

Happy coding!