Saya telah memperbarui jawaban ini. Saya menyukai gagasan menggunakan korek api lebih baik, tetapi lebih lambat:
console.log(("str1,str2,str3,str4".match(/,/g) || []).length); //logs 3
console.log(("str1,str2,str3,str4".match(new RegExp("str", "g")) || []).length); //logs 4
jsfiddle
Gunakan literal ekspresi reguler jika Anda tahu apa yang Anda cari sebelumnya, jika tidak, Anda bisa menggunakan RegExp
konstruktor, dan meneruskan g
benderanya sebagai argumen.
match
kembali null
tanpa hasil demikian|| []
Jawaban asli yang saya buat pada tahun 2009 di bawah ini. Ini menciptakan sebuah array yang tidak perlu, tetapi menggunakan pemisahan lebih cepat (pada September 2014). Saya ambivalen, jika saya benar-benar membutuhkan kecepatan tidak akan ada pertanyaan bahwa saya akan menggunakan split, tapi saya lebih suka menggunakan pertandingan.
Jawaban lama (mulai 2009):
Jika Anda mencari koma:
(mainStr.split(",").length - 1) //3
Jika Anda mencari str
(mainStr.split("str").length - 1) //4
Baik dalam jawaban @Llo dan dalam uji jsperf konyol saya sendiri muncul dengan cepat, setidaknya di Chrome, tetapi sekali lagi membuat array tambahan sepertinya tidak waras.
Setidaknya ada empat cara. Pilihan terbaik, yang seharusnya menjadi yang tercepat untuk mesin RegEx asli -, ditempatkan di bagian atas. jsperf.com saat ini sedang down, kalau tidak saya akan memberikan Anda statistik kinerja.
Pembaruan : Tolong, cari tes kinerja di sini , dan jalankan sendiri, sehingga dapat berkontribusi hasil kinerja Anda. Spesifikasi hasil akan diberikan nanti.
1.
2.
perpecahan tidak direkomendasikan. Sumberdaya lapar. Alokasikan instance 'Array' baru untuk setiap pertandingan. Jangan coba itu untuk file> 100MB melalui FileReader. Anda sebenarnya dapat dengan mudah mengamati penggunaan sumber daya EXACT menggunakan opsi profiler Chrome .
3.
4.
mencari satu karakter
Memperbarui:
5.
pemetaan elemen dan penyaringan, tidak direkomendasikan karena preallokasi sumber daya keseluruhan daripada menggunakan 'generator' Pythonian
Bagikan: Saya membuat intisari ini , dengan 8 metode penghitungan karakter saat ini, sehingga kami dapat langsung menyatukan dan berbagi ide-ide kami - hanya untuk bersenang-senang, dan mungkin beberapa tolok ukur yang menarik :)
https://gist.github.com/2757250
sumber
||[]
sedang dilakukan tetapi jawaban ini luar biasa! Untuk orang lain yang menggaruk-garuk kepala mereka,match()
kembalinull
jika tidak ada kecocokan yang ditemukan dan||[]
akan mengembalikan array 0 panjang jikamatch()
kembalinull
, artinyalength()
akan mengembalikan 0 bukannya menghasilkan kesalahan jenis.index = -2
, tapi terima kasih banyak @AustustusTambahkan fungsi ini ke prototipe sengatan:
pemakaian:
sumber
"stringsstringstrings".count("str")
?Pencarian Google cepat mendapatkan ini (dari http://www.codecodex.com/wiki/index.php?title=Count_the_number_of_occurrences_of_a_specific_character_in_a_string#JavaScript )
Gunakan seperti ini:
sumber
*
char (SyntaxError: nothing to repeat
)Cukup, gunakan pemisahan untuk mencari tahu jumlah kemunculan karakter dalam sebuah string.
mainStr.split(',').length
// memberikan 4 yang merupakan jumlah string setelah pemisahan menggunakan pembatas komamainStr.split(',').length - 1
// memberikan 3 yang merupakan jumlah komasumber
Berikut adalah solusi yang serupa, tetapi menggunakan
Array.prototype.reduce
Seperti yang disebutkan,
String.prototype.split
bekerja jauh lebih cepat daripadaString.prototype.replace
.sumber
Saya telah menemukan bahwa pendekatan terbaik untuk mencari karakter dalam string yang sangat besar (misalnya, panjangnya 1.000 000 karakter) adalah dengan menggunakan
replace()
metode ini.Anda dapat melihat suite JSPerf lain untuk menguji metode ini bersama dengan metode lain untuk menemukan karakter dalam sebuah string.
sumber
Anda juga dapat mengistirahatkan string dan bekerja dengannya seperti array elemen yang digunakan
Atau
sumber
Saya membuat sedikit perbaikan pada jawaban yang diterima, memungkinkan untuk memeriksa dengan pencocokan case-sensitive / case-sensitive, dan merupakan metode yang dilampirkan pada objek string:
lit
adalah string untuk mencari (seperti 'ex'), dan cis adalah case-insensitivity, default ke false, itu akan memungkinkan untuk pemilihan yang tidak sensitif case.Untuk mencari string
'I love StackOverflow.com'
huruf kecil'o'
, Anda akan menggunakan:amount_of_os
akan sama dengan2
.Jika kami harus mencari string yang sama lagi menggunakan pencocokan case-sensitive, Anda akan menggunakan:
Kali ini,
amount_of_os
akan sama dengan3
, karena modalO
dari string akan dimasukkan dalam pencarian.sumber
ok, yang lain dengan regexp - mungkin tidak cepat, tetapi lebih pendek dan lebih mudah dibaca daripada yang lain, dalam kasus saya hanya
'_'
untuk menghitunghapus saja semua yang tidak terlihat seperti char Anda tetapi tidak terlihat bagus dengan string sebagai input
sumber
Performa Split vs RegExp
sumber
Cara termudah yang saya temukan ...
Contoh-
sumber
Saya sedang mengerjakan proyek kecil yang membutuhkan penghitung sub-string. Mencari frasa yang salah tidak memberi saya hasil, namun setelah menulis implementasi saya sendiri saya telah menemukan pertanyaan ini. Ngomong-ngomong, ini cara saya, mungkin lebih lambat dari kebanyakan di sini, tetapi mungkin bermanfaat bagi seseorang:
http://jsfiddle.net/5ZzHt/1/
Tolong beri tahu saya jika Anda menemukan implementasi ini gagal atau tidak mengikuti beberapa standar! :)
PEMBARUAN Anda mungkin ingin mengganti:
Dengan:
Baca menarik membahas hal di atas: http://www.erichynds.com/blog/javascript-length-property-is-a-stored-value
sumber
Jika Anda menggunakan lodash, metode _.countBy akan melakukan ini:
Metode ini juga berfungsi dengan array:
sumber
Ini solusinya. Banyak solusi yang sudah diposting sebelum saya. Tapi saya suka berbagi pandangan saya di sini.
Di sini Anda menemukan REPL saya
sumber
Metode tercepat tampaknya melalui operator indeks:
Atau sebagai fungsi prototipe:
sumber
Berikut ini menggunakan ekspresi reguler untuk menguji panjangnya. testex memastikan Anda tidak memiliki 16 atau lebih karakter non-koma berturut-turut. Jika lulus tes, maka hasil untuk membagi string. menghitung koma semudah menghitung token dikurangi satu.
sumber
sumber
Bagaimana dengan string.split (diinginkanCharecter) .length-1
Contoh:
var str = "hellow how is life"; var len = str.split ("h"). length-1; akan memberikan hitungan 2 untuk karakter "h" dalam string di atas;
sumber
Saya menggunakan Node.js v.6.0.0 dan yang tercepat adalah yang dengan indeks (metode ke-3 dalam jawaban Lo Sauer).
Yang kedua adalah:
sumber
Inilah salah satu yang hampir secepat metode split dan replace, yang sedikit lebih cepat daripada metode regex (dalam chrome).
sumber
Saya baru saja melakukan tes yang sangat cepat dan kotor pada repl.it menggunakan Node v7.4. Untuk satu karakter, standar untuk loop paling cepat:
Beberapa kode :
Hasil dari beberapa proses :
sumber
Dan ada:
Bekerja dengan bilangan bulat juga!
sumber
Solusi saya:
sumber
String.prototype.match
pengembaliannull
tanpa kecocokan. Itu berarti tidak ada referensi ke objek denganlength
atribut. Dengan kata lain:String.prototype.match.call('willnotwork', /yesitwill/) === null
Metode kelima dalam jawaban Leo Sauers gagal, jika karakternya ada di awal string. misalnya
akan memberikan 2 sebagai ganti 3, karena filter funtion Boolean memberikan false untuk 0.
Fungsi filter lain yang mungkin:
sumber
Saya tahu ini mungkin pertanyaan lama tapi saya punya solusi sederhana untuk pemula tingkat rendah dalam JavaScript.
Sebagai seorang pemula, saya hanya bisa memahami beberapa solusi untuk pertanyaan ini, jadi saya menggunakan dua loop FOR bersarang untuk memeriksa setiap karakter terhadap setiap karakter lain dalam string, menambah variabel jumlah untuk setiap karakter yang ditemukan yang sama dengan karakter itu.
Saya membuat objek kosong baru di mana setiap kunci properti adalah karakter dan nilainya berapa kali setiap karakter muncul dalam string (hitung).
Fungsi contoh: -
sumber
Saya percaya Anda akan menemukan solusi di bawah ini menjadi sangat singkat, sangat cepat, dapat bekerja dengan string yang sangat panjang, mampu mendukung beberapa pencarian karakter, bukti kesalahan, dan mampu menangani pencarian string kosong.
Contoh penggunaan:
Kode di atas memperbaiki bug kinerja utama di Jakub Wawszczyk bahwa kode terus mencari kecocokan bahkan setelah indexOf mengatakan tidak ada dan versinya sendiri tidak berfungsi karena dia lupa memberikan parameter input fungsi.
sumber
Dalam javascript Anda dapat menggunakan kode di atas untuk mendapatkan kemunculan karakter dalam sebuah string.
sumber
Solusi saya dengan ramda js:
Tautan ke REPL.
sumber
Fungsi mengambil string str sebagai parameter dan menghitung kemunculan setiap karakter unik dalam string. Hasilnya datang dalam pasangan kunci - nilai untuk setiap karakter.
sumber