Lebih
Bagaimana cara menghitung string terjadinya dalam string?
Bagaimana saya bisa menghitung berapa kali string tertentu terjadi dalam string lain. Sebagai contoh, ini adalah apa yang saya coba lakukan dalam Javascript:
var temp = "This is a string.";
alert(temp.count("is")); //should output '2'
551
28
G
dalam ekspresi regular (singkatan global) kata untuk mencari seluruh string bukan hanya menemukan kejadian pertama. Ini pertandinganadalah
dua kali:var temp = "Ini adalah sebuah string."; var count = (temp.match(/adalah/g) || []).panjang; konsol.log(hitung);
Dan, jika tidak ada pertandingan, itu kembali
0
:var temp = "Hello World!"; var count = (temp.match(/adalah/g) || []).panjang; konsol.log(hitung);
Penggunaan
allowOverlapping
Pertandingan:
Unit Test
Acuan
Gist
Anda dapat mencoba ini:
Solusi saya:
Anda dapat menggunakan
cocok
untuk mendefinisikan fungsi seperti:Non-regex versi:
Hanya kode-golf Rebecca Chernoff's solusi :-)
Ini akan kembali 2.
Berikut ini adalah cara tercepat fungsi!
Kenapa lebih cepat?
String.prototipe.timesCharExist=function(c){var t=0,l=0,c=(c+'')[0];sementara(l=ini.indexOf(c,l)+1)++t;return t};
Berikut adalah lebih lambat dan lebih mudah dibaca versi:
Yang satu ini lebih lambat karena counter, panjang var nama dan penyalahgunaan 1 var.
Untuk menggunakannya, anda hanya melakukan ini:
Edit: (2013/12/16)
DON'T digunakan dengan Opera 12.16 atau lebih tua! ini akan memakan waktu hampir 2,5 x lebih dari regex solusi!
Di chrome, solusi ini akan memakan waktu antara 14ms dan 20ms untuk 1.000.000 karakter.
Regex solusi membutuhkan 11-14ms untuk jumlah yang sama.
Menggunakan fungsi (di luar
String.prototipe
) akan memakan waktu sekitar 10-13 menit.Berikut adalah kode yang digunakan:
Hasil dari semua solusi harus 100,000!
Catatan: jika anda ingin fungsi ini untuk menghitung lebih dari 1 char, perubahan, di mana
c=(c+'')[0]
kec=c+''
Saya pikir tujuan untuk regex adalah jauh berbeda dari
indexOf
.indexOf
hanya menemukan kejadian dari suatu string tertentu sementara di regex anda dapat menggunakan wildcard seperti[A-Z]
yang berarti ia akan menemukan setiap modal karakter dalam kata tanpa menyatakan karakter yang sebenarnya.Contoh:
Bagi siapa saja yang menemukan thread ini di masa depan, perhatikan bahwa jawaban yang diterima tidak akan selalu menghasilkan nilai yang benar jika anda menggeneralisasi itu, karena itu akan tersedak pada regex operator seperti
$
dan.
. Berikut ini's versi yang lebih baik, yang dapat menangani setiap jarum:Super duper lama, tapi aku harus melakukan sesuatu seperti ini hari ini dan hanya berpikir untuk memeriksa JADI, setelah itu. Bekerja dengan cukup cepat bagi saya.
Lihat :- jumlah substring yang muncul dalam string untuk penjelasan langkah demi langkah.
Membangun di atas @Vittim.kami jawab di atas. Aku suka mengontrol metode memberi saya, sehingga mudah untuk memperpanjang, tapi aku harus menambahkan kasus ketidakpekaan dan membatasi cocok dengan seluruh kata-kata dengan dukungan untuk tanda baca. (misalnya "mandi" di "mandi." tetapi tidak "mandi")
Tanda baca regex berasal dari: https://stackoverflow.com/a/25575009/497745 (https://stackoverflow.com/questions/4328500/how-can-i-strip-all-punctuation-from-a-string-in-javascript-using-regex)
Silahkan merasa bebas untuk memodifikasi dan refactor jawaban ini jika anda melihat bug atau perbaikan.
Gunakan get_occurrence(varS,string) untuk menemukan terjadinya kedua karakter dan string dalam String.
Coba
Tidak ada yang akan pernah melihat ini, tapi itu's baik untuk membawa kembali rekursi dan panah fungsi once in a while (mulia pun intended)
Versi sederhana tanpa regex: