Dengan regex (saya berasumsi) atau metode lain, bagaimana saya bisa mengonversi hal-hal seperti:
marker-image
atau my-example-setting
ke markerImage
atau myExampleSetting
.
Saya sedang berpikir tentang hanya membelah pada -
saat itu mengkonversi indeks dari hypen +1 ke huruf besar. Tapi sepertinya cukup kotor dan berharap bantuan dengan regex yang bisa membuat kode lebih bersih.
Tidak ada jQuery ...
javascript
regex
camelcasing
Oscar Godson
sumber
sumber
Jawaban:
Coba ini:
Ekspresi reguler akan cocok dengan
-i
inmarker-image
dan hanya menangkapi
. Ini kemudian ditingkatkan dalam fungsi panggilan balik dan diganti.sumber
myString.replace(/([a-z][A-Z])/g, function (g) { return g[0] + '-' + g[1].toLowerCase() });
myString.replace(/-([a-z])/i, function (i) { return i[1].toUpperCase() });
i
bendera. Tanpanya, pola Anda meleset dari "Kapitalisasi-Bagian" (tidak akan diubah menjadi "Kapitalisasi bagian"). Juga, saya pribadi lebih suka peningkatan keterbacaan beberapa parameter, tapi itu jelas masalah gaya. Secara keseluruhan, saya akan pergi dengan.replace( /-([a-z])/gi, function ( $0, $1 ) { return $1.toUpperCase(); } );
.var camelCased = myString.replace(/(-+|\s+)\w/g, function (g) { return g[1].toUpperCase(); });
var camelCased = myString.replace(/(-+|\s+)\w/g, function (g) { return g[g.length - 1].toUpperCase(); });
:?Ini adalah salah satu utilitas hebat yang ditawarkan Lodash jika Anda tercerahkan dan memasukkannya ke dalam proyek Anda.
sumber
Anda bisa mendapatkan hypen dan karakter berikutnya dan menggantinya dengan versi karakter yang lebih besar:
sumber
Inilah versi fungsi camelCase saya:
Ini menangani semua kasus tepi berikut:
Berikut tautan ke tes langsung: http://jsfiddle.net/avKzf/2/
Berikut adalah hasil dari tes:
Perhatikan bahwa string yang dimulai dengan pembatas akan menghasilkan huruf besar di awal. Jika bukan itu yang Anda harapkan, Anda selalu dapat menggunakan lcfirst. Ini pertama saya jika Anda membutuhkannya:
sumber
Ini tidak menjerit bagi
RegExp
saya. Secara pribadi saya mencoba untuk menghindari ekspresi reguler ketika metode string dan array yang sederhana sudah cukup:sumber
Berikut adalah opsi lain yang menggabungkan jawaban pasangan di sini dan menjadikannya metode pada string:
Digunakan seperti ini:
sumber
sumber
Anda dapat menggunakan camelcase dari NPM.
npm install --save camelcase
sumber
Pengambilan lagi.
sumber
mungkin juga menggunakan indexOf dengan rekursi untuk tugas itu.
perbandingan ::: mengukur waktu eksekusi untuk dua skrip yang berbeda:
kode:
sumber
Hanya versi dengan flag, untuk loop dan tanpa Regex:
sumber
Ini implementasi saya (hanya untuk membuat tangan kotor)
sumber
Gunakan ini jika Anda mengizinkan angka dalam string Anda.
Jelas bagian-bagian yang dimulai dengan angka tidak akan dikapitalisasi, tetapi ini mungkin berguna dalam beberapa situasi.
sumber