Apakah ada fungsi siap yang mengubah Strings case unta menjadi string dipisahkan garis bawah?
Saya ingin sesuatu seperti ini:
"CamelCaseString".to_underscore
untuk mengembalikan "camel_case_string".
...
ruby-on-rails
ruby
string
formatting
case-conversion
Daniel Cukier
sumber
sumber
Jawaban:
ActiveSupport Rails menambahkan garis bawah pada String menggunakan yang berikut ini:
Maka Anda dapat melakukan hal-hal menyenangkan:
sumber
tr("-","_")
ketr("- ","_")
(spasi ditambahkan ke param pertama), ini juga akan mengubah spasi menjadi garis bawah. Juga, saya pikir Anda bahkan tidak perlu memasukkanself.
, atau setidaknya itu berfungsi untuk saya di Ruby 1.9.3.require 'active_support/core_ext/string'
Kamu bisa memakai
Atau hanya
Kedua opsi cara akan menghasilkan
"camel_cased_name"
. Anda dapat memeriksa detail lebih lanjut di sini .sumber
Implementasi Ruby satu lapis:
Begitu
"SomeCamelCase".to_underscore # =>"some_camel_case"
sumber
/([^A-Z])([A-Z]+)/
, untuk menangani"ALLCAPS"
->"allcaps"
alih-alih"a_ll_ca_ps"
Ada metode inbuilt Rails yang disebut 'garis bawah' yang dapat Anda gunakan untuk tujuan ini
Metode 'garis bawah' biasanya dapat dianggap sebagai kebalikan dari 'camelize'
sumber
Begini cara Rails melakukannya :
sumber
Penerima dikonversi menjadi kotak ular: http://rubydoc.info/gems/extlib/0.9.15/String#snake_case-instance_method
Ini adalah perpustakaan Dukungan untuk DataMapper dan Merb. ( http://rubygems.org/gems/extlib )
sumber
Lihat snakecase dari Ruby Facets
Kasus-kasus berikut ditangani, seperti yang terlihat di bawah ini:
Dari: https://github.com/rubyworks/facets/blob/master/lib/core/facets/string/snakecase.rb
sumber
"Dumb Penguin's Egg".snakecase # => "dumb_penguin's_egg"
Oneliner singkat untuk CamelCases ketika Anda memiliki spasi juga termasuk (tidak berfungsi dengan benar jika Anda memiliki kata peralihan dengan huruf awal kecil):
sumber
underscore
bukan bagian dari rubyJika seseorang mencari kasus ketika dia perlu menerapkan garis bawah untuk merangkai dengan spasi dan ingin mengubahnya menjadi garis bawah juga Anda dapat menggunakan sesuatu seperti ini
Atau cukup gunakan .parameterize ('_') tetapi perlu diingat bahwa ini sudah usang
sumber
Saya ingin ini:
Patch
String
kelas monyet . Ada kelas yang dimulai dengan dua atau lebih huruf dalam huruf besar.sumber
"\1_\2"
agar'\1_\2'
Anda tidak akan berakhir dengan"came\u0001_\u0002ase"
bukannya"camel_case"
Ruby 2.5 ... mungkin orang lain juga.