Bagaimana saya bisa menghitung berapa kali string tertentu terjadi di string lain. Sebagai contoh, inilah yang saya coba lakukan dalam Javascript:
var temp = "This is a string.";
alert(temp.count("is")); //should output '2'
javascript
regex
string
TruMan1
sumber
sumber
Jawaban:
The
g
dalam ekspresi reguler (kependekan dari global ) mengatakan untuk mencari seluruh string daripada hanya menemukan kemunculan pertama. Ini cocokis
dua kali:Dan, jika tidak ada yang cocok, ia kembali
0
:sumber
count = (str.match(/is/g) || []).length
untuk menangani jika Anda tidak memiliki kecocokan.RegExp
konstruktor dan meneruskan string yang Anda cari, tetapi dalam hal ini Anda harus melarikan diri dari semua metakarakter. Dalam skenario itu, pendekatan string murni lebih disukai.Pemakaian
allowOverlapping
Cocok:
Tes Unit
Tolok ukur
Intisumber
substring.length
di hampir setiap loop, Anda harus mempertimbangkan untuk menyimpannya di luarwhile
occurrences(11,1) //2
dan masih akan bekerja. (Lebih cepat melakukan cara ini daripada memeriksa jenis dan memanggil toString () )sumber
countInstances("isisisisisis", "is") === 0
.Anda dapat mencoba ini:
sumber
theString.split(myvar).length - 1
yang Anda tidak bisa dengan regex sederhanaSolusi saya:
sumber
countOcurrences('Hello...','.')==8
bukan 3Anda dapat menggunakan
match
untuk mendefinisikan fungsi tersebut:sumber
return m ? m.length:-1;
.Versi non-regex:
sumber
is
kejadianHanya kode-golf Rebecca Chernoff 's solusi :-)
sumber
Ini akan mengembalikan 2.
sumber
Inilah fungsi tercepat!
Kenapa lebih cepat?
Semua operasi digabungkan sebagaimana mestinya, menghindari perlambatan karena beberapa operasi
Ini versi yang lebih lambat dan lebih mudah dibaca:
Yang ini lebih lambat karena meja, nama var panjang dan penyalahgunaan 1 var.
Untuk menggunakannya, Anda cukup melakukan ini:
Edit: (2013/12/16)
JANGAN gunakan dengan Opera 12.16 atau lebih lama! itu akan memakan waktu hampir 2,5x lebih banyak daripada solusi regex!
Pada Chrome, solusi ini akan membutuhkan antara 14ms dan 20ms untuk 1.000.000 karakter.
Solusi regex membutuhkan 11-14ms untuk jumlah yang sama.
Menggunakan fungsi (di luar
String.prototype
) akan memakan waktu sekitar 10-13ms.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 mana
c=(c+'')[0]
dalamc=c+''
sumber
sumber
Saya pikir tujuan untuk regex jauh berbeda
indexOf
.indexOf
cukup temukan kemunculan string tertentu sementara di regex Anda dapat menggunakan wildcard seperti[A-Z]
yang artinya akan menemukan karakter kapital apa pun dalam kata tersebut tanpa menyatakan karakter yang sebenarnya.Contoh:
sumber
Super duper tua, tapi saya perlu melakukan sesuatu seperti ini hari ini dan hanya berpikir untuk memeriksa SO sesudahnya. Bekerja sangat cepat untukku.
sumber
Refer: - hitung substring yang muncul di string untuk penjelasan langkah demi langkah.
sumber
Membangun berdasarkan Vittim.us jawaban di atas. Saya suka kontrol yang diberikan metodenya, membuatnya mudah diperluas, tetapi saya perlu menambahkan ketidaksensitifan huruf besar dan membatasi kecocokan pada seluruh kata dengan dukungan tanda baca. (mis. "mandi" dalam "mandi." tetapi tidak "mandi")
Regex tanda baca berasal dari: https://stackoverflow.com/a/25575009/497745 ( Bagaimana cara menghapus semua tanda baca dari sebuah string dalam JavaScript menggunakan regex? )
Jangan ragu untuk memodifikasi dan memperbaiki jawaban ini jika Anda menemukan bug atau peningkatan.
sumber
Bagi siapa pun yang menemukan utas ini di masa mendatang, perhatikan bahwa jawaban yang diterima tidak akan selalu mengembalikan nilai yang benar jika Anda menggeneralisasi, karena itu akan mencekik operator regex seperti
$
dan.
. Ini versi yang lebih baik, yang dapat menangani jarum apa pun :sumber
Gunakan get_occurrence (varS, string) untuk menemukan kemunculan kedua karakter dan string dalam sebuah String.
sumber
Cobalah
sumber
Versi sederhana tanpa regex:
sumber
Tidak ada yang akan melihat ini, tapi ada baiknya untuk mengembalikan fungsi rekursi dan panah sesekali (pun dengan maksud yang mulia)
sumber
Coba ini
Tautan Fiddle: https://jsfiddle.net/rajaramtt/gn0dtsjc/1/
sumber
Sekarang ini adalah utas yang sangat lama saya temui tetapi karena banyak yang mendorong jawaban mereka, inilah milik saya dengan harapan dapat membantu seseorang dengan kode sederhana ini.
Saya tidak yakin apakah itu solusi tercepat tetapi saya lebih suka untuk kesederhanaan dan untuk tidak menggunakan regex (saya hanya tidak suka menggunakannya!)
sumber
Fungsi ini mengembalikan jumlah kemunculan kata dalam teks.
Catatan kami menggunakan toLowerCase untuk menghitung jumlah kemunculan apa pun format (huruf besar, huruf besar ...) dari kata dan teks
sumber
Jawaban untuk Leandro Batista: hanya masalah dengan ekspresi regex.
sumber
sumber
Agak terlambat tetapi, dengan asumsi kita memiliki string berikut:
Pertama kami membagi pada apa pun yang Anda ingin mencocokkan, ini akan mengembalikan serangkaian string.
Kemudian kita mendapatkan panjangnya dan mengurangi 1 ke sana karena membagi default ke array ukuran 1 dan akibatnya menambah ukurannya setiap kali ia menemukan kejadian.
Anda juga dapat melakukan semua ini dalam satu baris sebagai berikut:
Semoga bisa membantu: D
sumber
Solusi ini didasarkan pada
.replace()
metode yang menerima RegEx sebagai parameter pertama dan fungsi sebagai parameter kedua yang dapat kita gunakan sebagai penutup untuk menambah penghitung ...Pemakaian
sumber
menemukan posting ini.
Algoritma yang sama dapat ditata lebih pendek:
sumber
substr_count
diterjemahkan ke Javascript dari phpPeriksa fungsi terjemahan Substr_count dari Locutus tentang Php
sumber
Coba ini:
sumber