Napisz funkcję do konwersji tekstu CamelCased na snake_case: FunctionForHTMLManipulation
staje sięfunction_for_html_manipulation
Tekst wejściowy będzie jednym odpowiednim identyfikatorem w wielu językach. Musi zaczynać się literą angielską, a następnie dowolną liczbą liter lub cyfr angielskich. Żadne inne znaki (spacje, symbole itp.) Są niedozwolone.
Każde „słowo” w tekście Wielbłąda zaczyna się wielką literą, chyba że na początku tekstu lub bezpośrednio po cyfrze, a po nim następuje zero lub więcej liter, w tym samym przypadku. Grupy cyfr będą traktowane jako osobne słowa, ale przejdą bez zmian.
Innymi słowy, mała litera, po której następuje wielka litera, oznacza podział wyrazu. Każda litera i cyfra obok siebie oznacza podział słowa. Wielka litera, po której następuje kolejna wielka litera i mała litera oznaczają podział wyrazu.
...lU...
=> ...l_u...
...l9...
=> ...l_9...
...U9...
=> ...u_9...
...9l...
=> ...9_l...
...9U...
=> ...9_u...
...UUl...
=>...u_ul...
Obaj Buy24Beers
i buy24beers
zostańcie buy_24_beers
.
MacDonaldAndObrian
staje się mac_donald_and_obrian
.
MACDonaldAndOBrian
staje się mac_donald_and_o_brian
.
MACDonaldAndOBrian
staje sięmac_donald_and_o_brian
” - dlaczego?...UUl...
=>...u_ul...
....
wskazuje, że jest w środku łańcucha.Odpowiedzi:
Retina ,
6137 bajtówWypróbuj online! (Nieznacznie zmodyfikowany, aby uruchomić pełny zestaw testów).
Wyjaśnienie
Zamiast znajdować granice słów do wstawienia znaków podkreślenia, po prostu dopasowujemy każde słowo i poprzedzamy je znakiem
_
. Dopasowywanie słów z lewej strony jest nieco denerwujące z powoduUUl
reguły, ale przy użyciu dopasowania .NET od prawej do lewej możemy łatwo dopasować słowa łapczywie. Aby uniknąć prowadzenia_
, korzystamy z limitów Retiny.r
Aktywuje tryb prawej do lewej,1>
mówi siatkówka do procesu wszystko z wyjątkiem pierwszego meczu (licząc od lewej do prawej). Wtedy tam cztery rodzaje „słów”:Ulll
,lll
,UUU
,ddd
. Można je łatwo dopasować do podanego wzoru. Podstawienie po prostu pisze_
po nim samo słowo.To po prostu zamienia wielkie litery na małe, aby zakończyć transformację.
źródło
JavaScript (ES6), 79 bajtów
źródło
JavaScript (ES6), 89 bajtów
źródło
PowerShell, 77 bajtów
Na podstawie odpowiedzi Neila .
Skrypt testu mniej golfowego:
Wynik:
źródło
Siatkówka , 62 bajty
Bezwstydnie przetłumaczone z rozwiązania JavaScript .
Wypróbuj online!
źródło
PowerShell,
6892 bajtówKrótko usunięte, +24 bajty za użycie niewłaściwego RegEx.
Wypróbuj online!
Zasadniczo to samo, co rozwiązania JavaScript.
źródło
buy24beers
iMACDonaldAndOBrian
. Przepraszam.Współczynnik, 140 bajtów
Nie golfowany:
źródło
Lua , 135 bajtów
Wypróbuj online!
To rozwiązanie korzysta ze skróconej notacji Lua dla klas znaków C (małe litery
%l
, wielkie litery%u
, alfabet%a
, cyfra%d
), notacji na granicy (%f[]
), a także z dodania całego dopasowania jako domyślnego pierwszego przechwytywania przy braku innych przechwyceń.źródło
Python 2 , 82 bajty
Wypróbuj online!
źródło