Elixir 정규식: 문자와 숫자 사이에 밑줄을 넣는 방법은 무엇입니까?

소개



오늘 나는 camelCase word combined with a numbersnake_case atom로 변형시키느라 애를 먹었다.

"helloWorld30" -> :hello_world_30


나는 전에 Macro.underscore/1를 사용해 보았고 밑줄을 추가하기 위해 문자열을 조작하는 데 사용해서는 안된다는 것을 알았습니다.

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



그래서 사용했습니다 Inflex: An Elixir library for handling word inflections
iex) "helloWorld30" 
|> Inflex.underscore()

iex) "hello_world30"


누군가 나를 도와주세요!



하지만 여전히 Inflex만 사용하면 원하는 출력을 표시할 수 없습니다.

운 좋게도 커뮤니티에 요청했고 도움을 주신 하나님께 감사드립니다.
Karl Seguin 🚀에게 외쳐보세요.

그는 RegEx 모듈 사용을 제안했습니다.

다음은 그가 준 RegEx입니다.

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

iex) "Hello World_9000"


나만의 버전


String 모듈을 사용하는 다른 버전.


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

iex) "helloWorld_30"



전체 출력



camelCase 단어를 숫자와 함께 snake_case 원자로 변환하려면 다음을 수행하십시오.

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


iex) "hello_world_30"


Happy coding!

좋은 웹페이지 즐겨찾기