Tulis fungsi untuk mengonversi teks CamelCased ke snake_case: FunctionForHTMLManipulation
menjadifunction_for_html_manipulation
Teks input akan menjadi pengidentifikasi tunggal yang cocok dalam banyak bahasa. Itu harus dimulai dengan huruf bahasa Inggris, kemudian diikuti oleh sejumlah huruf atau angka bahasa Inggris. Tidak ada karakter lain (spasi, simbol, dll.) Yang diperbolehkan.
Setiap "kata" dalam teks CamelCased akan dimulai dengan huruf kapital kecuali di awal teks atau segera setelah digit, dan diikuti oleh nol atau lebih huruf, semua huruf yang sama. Kelompok digit akan dianggap sebagai kata-kata yang terpisah tetapi melewati tidak berubah.
Dengan kata lain, huruf kecil diikuti dengan huruf besar menunjukkan kata istirahat. Setiap huruf dan angka di sebelah satu sama lain menunjukkan kata istirahat. Huruf besar diikuti oleh huruf besar lain dan huruf kecil menunjukkan kata istirahat.
...lU...
=> ...l_u...
...l9...
=> ...l_9...
...U9...
=> ...u_9...
...9l...
=> ...9_l...
...9U...
=> ...9_u...
...UUl...
=>...u_ul...
Keduanya Buy24Beers
dan buy24beers
menjadi buy_24_beers
.
MacDonaldAndObrian
menjadi mac_donald_and_obrian
.
MACDonaldAndOBrian
menjadi mac_donald_and_o_brian
.
MACDonaldAndOBrian
menjadimac_donald_and_o_brian
" - mengapa?...UUl...
=>...u_ul...
....
menunjukkan itu di tengah-tengah sebuah string.Jawaban:
Retina ,
6137 byteCobalah online! (Sedikit dimodifikasi untuk menjalankan suite uji lengkap.)
Penjelasan
Alih-alih menemukan batas kata untuk disisipkan garis bawah, kami cukup mencocokkan setiap kata dan menambahkan a
_
. Mencocokkan kata-kata dari kiri agak mengganggu karenaUUl
aturan, tetapi menggunakan pencocokan kanan-ke-kiri .NET kita dapat dengan mudah mencocokkan kata-kata dengan rakus. Untuk menghindari petunjuk_
, kami menggunakan batasan Retina.The
r
mengaktifkan modus kanan-ke-kiri,1>
mengatakan Retina untuk proses semuanya kecuali pertandingan pertama (penghitungan dari kiri ke kanan). Lalu ada empat jenis "kata":Ulll
,lll
,UUU
,ddd
. Ini mudah dicocokkan dengan pola yang diberikan. Substitusi hanya menulis_
diikuti oleh kata itu sendiri.Ini hanya mengubah huruf besar menjadi huruf kecil untuk menyelesaikan transformasi.
sumber
JavaScript (ES6), 79 byte
sumber
JavaScript (ES6), 89 byte
sumber
Powershell, 77 byte
Berdasarkan jawaban Neil .
Skrip uji yang kurang golf:
Keluaran:
sumber
Retina , 62 byte
Tanpa malu-malu diterjemahkan dari solusi JavaScript .
Cobalah online!
sumber
PowerShell,
6892 byteSecara singkat dihapus, +24 byte karena menggunakan RegEx yang salah.
Cobalah online!
Pada dasarnya sama dengan solusi JavaScript.
sumber
buy24beers
danMACDonaldAndOBrian
. Maaf.Faktor, 140 byte
Tidak Disatukan:
sumber
Lua , 135 byte
Cobalah online!
Solusi ini mendapat manfaat dari notasi steno Lua untuk kelas karakter C (huruf kecil
%l
, huruf besar%u
, alfabet%a
, digit%d
), notasi perbatasan (%f[]
), dan dari keseluruhan pertandingan ditambahkan sebagai tangkapan pertama implisit tanpa adanya tangkapan lainnya.sumber
Python 2 , 82 byte
Cobalah online!
sumber