Bagaimana saya bisa mengubah string menjadi case unta menggunakan javascript regex?
EquipmentClass name
atau
Equipment className
atau equipment class name
atauEquipment Class Name
harus semua menjadi: equipmentClassName
.
javascript
regex
camelcasing
Scott Klarenbach
sumber
sumber
Jawaban:
Melihat kode Anda, Anda dapat mencapainya hanya dengan dua
replace
panggilan:Sunting: Atau dengan satu
replace
panggilan, tangkap spasi putih juga diRegExp
.sumber
camelize("Let's Do It!") === "let'SDoIt!"
wajah sedih . Saya akan mencoba sendiri tetapi takut saya hanya akan menambahkan pengganti lain.return this.replace(/[^a-z ]/ig, '').replace(/(?:^\w|[A-Z]|\b\w|\s+)/g,
...const toCamelCase = (str) => str.replace(/(?:^\w|[A-Z]|\b\w)/g, (ltr, idx) => idx === 0 ? ltr.toLowerCase() : ltr.toUpperCase()).replace(/\s+/g, '');
.toLowerCase()
metode ini. Misalnya. menggunakan solusi @ tabrindle di atas:const toCamelCase = (str) => str.toLowerCase().replace(/(?:^\w|[A-Z]|\b\w)/g, (ltr, idx) => idx === 0 ? ltr.toLowerCase() : ltr.toUpperCase()).replace(/\s+/g, '');
Jika ada yang menggunakan lodash , ada
_.camelCase()
fungsi.sumber
Saya akhirnya melakukan ini:
Saya mencoba untuk menghindari chaining bersama beberapa pernyataan ganti. Sesuatu di mana saya memiliki fungsi $ 1, $ 2, $ 3. Tetapi jenis pengelompokan seperti itu sulit dipahami, dan penyebutan Anda tentang masalah lintas browser adalah sesuatu yang tidak pernah saya pikirkan juga.
sumber
this.valueOf()
alih-alih lewatstr
. Atau (seperti dalam kasus saya)this.toLowerCase()
karena string input saya berada di SEMUA CAPS yang tidak memiliki bagian non-punuk diturunkan dengan benar. Menggunakan hanyathis
mengembalikan objek string itu sendiri, yang sebenarnya merupakan array dari char, maka TypeError yang disebutkan di atas.Anda dapat menggunakan solusi ini:
sumber
toCamelCase
fungsinya hanya melakukannya.ES5
ES6
Catatan:
Untuk bahasa dengan aksen. Sertakan
À-ÖØ-öø-ÿ
dengan regex sebagai berikut.replace(/[^a-zA-ZÀ-ÖØ-öø-ÿ0-9]+(.)/g
sumber
https://stackoverflow.com/posts/52551910/revisions
ES6, saya belum mengujinya. Saya akan memeriksa dan memperbarui.Dalam kasus khusus Scott saya akan membahas sesuatu seperti:
Regex akan cocok dengan karakter pertama jika dimulai dengan huruf kapital, dan karakter alfabet apa saja yang mengikuti spasi, yaitu 2 atau 3 kali dalam string yang ditentukan.
Dengan
/^([A-Z])|[\s-_](\w)/g
membumbui regex untuk itu juga akan membuat unta nama tanda hubung dan garis bawah.sumber
+
) ke grup karakter, yaitu:/^([A-Z])|[\s-_]+(\w)/g
Saya mencoba untuk menemukan fungsi JavaScript ke
camelCase
string, dan ingin memastikan karakter khusus akan dihapus (dan saya kesulitan memahami apa yang dilakukan beberapa jawaban di atas). Ini didasarkan pada jawaban cc young, dengan komentar yang ditambahkan dan penghapusan karakter $ peci & l.sumber
Contoh yang andal dan berfungsi yang telah saya gunakan selama bertahun-tahun:
Karakter yang berubah huruf:
-
_
.
sumber
Jika regexp tidak diperlukan, Anda mungkin ingin melihat kode berikut yang sudah lama saya buat untuk Twinkle :
Saya belum melakukan tes kinerja, dan versi regexp mungkin atau mungkin tidak lebih cepat.
sumber
Pendekatan ES6 saya :
sumber
sumber
lodash dapat melakukan trik dengan yakin dan baik:
Meskipun
lodash
mungkin pustaka "besar" (~ 4kB), pustaka ini berisi banyak fungsi yang biasanya Anda gunakan untuk cuplikan, atau buat sendiri.sumber
Berikut adalah satu liner yang melakukan pekerjaan:
Itu membagi string yang lebih rendah-casa berdasarkan pada daftar karakter yang disediakan di RegExp
[.\-_\s]
(tambahkan lebih banyak di dalam []!) Dan mengembalikan array kata. Kemudian, ia mengurangi deretan string menjadi satu rangkaian kata yang digabungkan dengan huruf-huruf pertama yang lebih besar. Karena pengurangan tidak memiliki nilai awal, itu akan mulai huruf besar huruf pertama dimulai dengan kata kedua.Jika Anda ingin PascalCase, cukup tambahkan string kosong awal
,'')
ke metode pengurangan.sumber
mengikuti pendekatan yang dapat dibaca @ Scott, sedikit penyesuaian
sumber
sedikit jawaban Scott yang dimodifikasi:
sekarang ini menggantikan '-' dan '_' juga.
sumber
Ke-14 permutasi di bawah ini menghasilkan hasil yang sama dari "equipmentClassName".
sumber
Anda dapat menggunakan solusi ini:
sumber
Karena pertanyaan ini membutuhkan jawaban lain ...
Saya mencoba beberapa solusi sebelumnya, dan semuanya memiliki satu kelemahan. Beberapa tidak menghapus tanda baca; beberapa tidak menangani kasus dengan angka; beberapa tidak menangani beberapa tanda baca secara berurutan.
Tak satu pun dari mereka yang menangani string
a1 2b
. Tidak ada konvensi yang didefinisikan secara eksplisit untuk kasus ini, tetapi beberapa pertanyaan stackoverflow lainnya menyarankan untuk memisahkan angka dengan garis bawah.Saya ragu ini adalah jawaban yang paling berkinerja (tiga regex melewati string, daripada satu atau dua), tetapi melewati semua tes yang dapat saya pikirkan. Sejujurnya, saya benar-benar tidak bisa membayangkan kasus di mana Anda melakukan begitu banyak konversi kasus unta sehingga kinerja akan jadi masalah.
(Saya menambahkan ini sebagai paket npm . Ini juga mencakup parameter boolean opsional untuk mengembalikan Pascal Case daripada Camel Case.)
Test case (Bercanda)
sumber
Ada solusi saya:
sumber
Metode ini tampaknya mengungguli sebagian besar jawaban di sini, ini sedikit berantakan meskipun, tidak ada pengganti, tidak ada regex, cukup membangun string baru yang camelCase.
sumber
Ini dibangun pada jawaban oleh CMS dengan menghapus karakter non-alfabet termasuk garis bawah, yang
\w
tidak menghapus.sumber
Casing unta atas ("TestString") untuk menurunkan case unta ("testString") tanpa menggunakan regex (mari kita hadapi itu, regex itu jahat):
sumber
Saya akhirnya membuat solusi yang sedikit lebih agresif:
Yang ini, di atas, akan menghapus semua karakter non-alfanumerik dan bagian kecil dari kata-kata yang jika tidak akan tetap menjadi huruf besar, mis.
Size (comparative)
=>sizeComparative
GDP (official exchange rate)
=>gdpOfficialExchangeRate
hello
=>hello
sumber
sumber
Inilah saran saya:
atau
Kasus uji:
sumber
Saya tahu ini adalah jawaban lama, tetapi ini menangani spasi putih dan _ (lodash)
sumber
"
di.replace(/_/g", " ")
bahwa kesalahan penyebab kompilasi?sumber
EDIT : Sekarang bekerja di IE8 tanpa perubahan.
EDIT : Saya berada di minoritas tentang apa camelCase sebenarnya (Leading karakter huruf kecil vs huruf besar.). Masyarakat luas percaya bahwa huruf kecil terkemuka adalah kasus unta dan modal utama adalah kasus pascal. Saya telah membuat dua fungsi yang hanya menggunakan pola regex. :) Jadi kami menggunakan kosakata terpadu. Saya telah mengubah pendirian saya untuk mencocokkan mayoritas.
Yang saya percaya Anda butuhkan adalah regex tunggal dalam kedua kasus:
atau
Dalam fungsi: Anda akan melihat bahwa dalam fungsi-fungsi ini penggantian mengganti non az dengan spasi vs string kosong. Ini untuk membuat batas kata untuk huruf besar. "hello-MY # world" -> "HelloMyWorld"
Catatan:
Nikmati
sumber
Saya pikir ini harus bekerja ..
sumber
Jangan gunakan String.prototype.toCamelCase () karena String.prototypes adalah read-only, sebagian besar kompiler js akan memberi Anda peringatan ini.
Seperti saya, mereka yang tahu bahwa string akan selalu berisi hanya satu ruang dapat menggunakan pendekatan yang lebih sederhana:
Semoga harimu menyenangkan. :)
sumber