Escreva uma função para converter o texto CamelCased em snake_case: FunctionForHTMLManipulation
torna - sefunction_for_html_manipulation
O texto de entrada será um único identificador adequado em vários idiomas. Ele deve começar com uma letra em inglês e, em seguida, ser seguido por qualquer número de letras ou dígitos em inglês. Nenhum outro caractere (espaços, símbolos, etc.) é permitido.
Cada "palavra" no texto do CamelCased começará com uma letra maiúscula, a menos que no início do texto ou imediatamente após um dígito, e seja seguida por zero ou mais letras, todos no mesmo caso. Grupos de dígitos serão considerados como palavras separadas, mas passarão inalterados.
Em outras palavras, uma letra minúscula seguida por uma letra maiúscula indica uma quebra de palavra. Qualquer letra e dígito próximos um do outro indica uma quebra de palavra. Uma letra maiúscula seguida por outra letra maiúscula e uma letra minúscula indica uma quebra de palavra.
...lU...
=> ...l_u...
...l9...
=> ...l_9...
...U9...
=> ...u_9...
...9l...
=> ...9_l...
...9U...
=> ...9_u...
...UUl...
=>...u_ul...
Ambos Buy24Beers
e buy24beers
se tornam buy_24_beers
.
MacDonaldAndObrian
torna-se mac_donald_and_obrian
.
MACDonaldAndOBrian
torna-se mac_donald_and_o_brian
.
MACDonaldAndOBrian
torna-semac_donald_and_o_brian
" - por quê?...UUl...
=>...u_ul...
....
indica que está no meio de uma string.Respostas:
Retina ,
6137 bytesExperimente online! (Ligeiramente modificado para executar um conjunto de testes completo.)
Explicação
Em vez de encontrar limites de palavras para inserir sublinhados, simplesmente combinamos cada palavra e adicionamos um a
_
. A correspondência de palavras da esquerda é um pouco irritante por causa daUUl
regra, mas, usando a correspondência da direita para a esquerda do .NET, podemos facilmente corresponder as palavras com avidez. Para evitar a liderança_
, usamos os limites da Retina.A
r
ativa o modo da direita para a esquerda, a1>
conta Retina para o processo de tudo, exceto o primeiro jogo (contagem da esquerda para a direita). Depois, há quatro tipos de "palavras":Ulll
,lll
,UUU
,ddd
. Eles são facilmente compatíveis com o padrão fornecido. A substituição apenas escreve um_
seguido pela própria palavra.Isso simplesmente transforma maiúsculas em minúsculas para concluir a transformação.
fonte
JavaScript (ES6), 79 bytes
fonte
JavaScript (ES6), 89 bytes
fonte
Powershell, 77 bytes
Baseado na resposta de Neil .
Script de teste com menos golfe:
Resultado:
fonte
Retina , 62 bytes
Vergonhosamente traduzido da solução JavaScript .
Experimente online!
fonte
PowerShell,
6892 bytesExcluídos brevemente, +24 bytes por usar o RegEx errado.
Experimente online!
Basicamente, o mesmo que as soluções JavaScript.
fonte
buy24beers
eMACDonaldAndOBrian
. Desculpe.Fator, 140 bytes
Ungolfed:
fonte
Lua , 135 bytes
Experimente online!
Esta solução se beneficia da notação abreviada de Lua para as classes de caracteres de C (minúscula
%l
, maiúscula%u
, alfabética%a
, dígito%d
), notação de fronteira (%f[]
) e de toda a correspondência sendo adicionada como a primeira captura implícita na ausência de outras capturas.fonte
Python 2 , 82 bytes
Experimente online!
fonte