Schreiben Sie eine Funktion, um CamelCased-Text in snake_case umzuwandeln: FunctionForHTMLManipulation
wirdfunction_for_html_manipulation
Der Eingabetext ist in vielen Sprachen eine geeignete Kennung. Es muss mit einem englischen Buchstaben beginnen, gefolgt von einer beliebigen Anzahl englischer Buchstaben oder Ziffern. Andere Zeichen (Leerzeichen, Symbole usw.) sind nicht zulässig.
Jedes "Wort" im CamelCased-Text beginnt mit einem Großbuchstaben, es sei denn, am Anfang des Textes oder unmittelbar nach einer Ziffer, gefolgt von null oder mehr Buchstaben in der gleichen Groß- / Kleinschreibung. Zifferngruppen werden als separate Wörter betrachtet, aber unverändert weitergeleitet.
Mit anderen Worten, ein Kleinbuchstabe, gefolgt von einem Großbuchstaben, weist auf einen Wortumbruch hin. Alle Buchstaben und Ziffern nebeneinander bedeuten einen Wortumbruch. Ein Großbuchstabe, gefolgt von einem anderen Großbuchstaben und einem Kleinbuchstaben, weist auf einen Wortumbruch hin.
...lU...
=> ...l_u...
...l9...
=> ...l_9...
...U9...
=> ...u_9...
...9l...
=> ...9_l...
...9U...
=> ...9_u...
...UUl...
=>...u_ul...
Beides Buy24Beers
und buy24beers
werden buy_24_beers
.
MacDonaldAndObrian
wird mac_donald_and_obrian
.
MACDonaldAndOBrian
wird mac_donald_and_o_brian
.
MACDonaldAndOBrian
wirdmac_donald_and_o_brian
" - warum?...UUl...
=> abgedeckt wird...u_ul...
....
zeigt an, dass es sich in der Mitte eines Strings befindet.Antworten:
Retina ,
6137 BytesProbieren Sie es online! (Leicht modifiziert, um eine vollständige Testsuite auszuführen.)
Erläuterung
Anstatt Wortgrenzen zum Einfügen von Unterstrichen zu finden, passen wir einfach jedes Wort an und stellen a voran
_
. Das Übereinstimmen von Wörtern von links ist aufgrund derUUl
Regel etwas ärgerlich , aber mit dem von rechts nach links passenden .NET können wir Wörter leicht gierig zuordnen. Um eine Führung zu vermeiden_
, nutzen wir die Grenzen von Retina.Der
r
aktiviert den Rechts-Links-Modus und1>
weist Retina an, alles außer der ersten Übereinstimmung zu verarbeiten (von links nach rechts zu zählen). Dann gibt es vier Arten von „Wörtern“:Ulll
,lll
,UUU
,ddd
. Diese lassen sich leicht mit dem vorgegebenen Muster abgleichen. Die Ersetzung schreibt nur ein_
gefolgt von dem Wort selbst.Dadurch wird Groß- und Kleinschreibung einfach in Kleinschreibung umgewandelt, um die Umwandlung abzuschließen.
quelle
JavaScript (ES6), 79 Byte
quelle
JavaScript (ES6), 89 Byte
quelle
Powershell, 77 Bytes
Basierend auf Neils Antwort .
Weniger Golf-Testskript:
Ausgabe:
quelle
Netzhaut , 62 Bytes
Schamlos übersetzt aus der JavaScript-Lösung .
Probieren Sie es online!
quelle
PowerShell,
68 bis92 ByteKurz gelöscht, +24 Bytes für die Verwendung des falschen RegEx.
Probieren Sie es online!
Grundsätzlich die gleichen wie die JavaScript-Lösungen.
quelle
buy24beers
undMACDonaldAndOBrian
. Es tut uns leid.Faktor 140 Byte
Ungolfed:
quelle
Lua , 135 Bytes
Probieren Sie es online!
Diese Lösung profitiert von Luas Kurzschreibweise für die Zeichenklassen von C (Kleinbuchstaben
%l
, Großbuchstaben%u
, Buchstaben%a
, Ziffern%d
), der Grenzschreibweise (%f[]
) und davon, dass die gesamte Übereinstimmung als implizite erste Erfassung hinzugefügt wird, wenn keine anderen Erfassungen vorhanden sind.quelle
Python 2 , 82 Bytes
Probieren Sie es online!
quelle