JavaScript: Berapa kali karakter muncul dalam string?

Jawaban:

82

Anda dapat menghapus karakter lain dalam string dan memeriksa panjangnya:

str.replace(/[^a]/g, "").length

Di sini dihitung berapa banyak ayang masuk str.

Gumbo
sumber
1
Hanya ingin menunjukkan bahwa Anda dapat memperhitungkan huruf besar juga dengan melakukan let xLength = str.replace(/[^a || A]/g, "").length;
HappyHands31
@ HappyHands31 Maksud Andalet xLength = str.replace(/[^aA]/g, "").length;
Donald Duck
46

Ini dihitung a dalam contoh di bawah ini:

str = "A man is as good as his word";
alert(str.split('a').length-1);

Jika Anda ingin case insensitive Anda menginginkan sesuatu seperti

alert(str.split( new RegExp( "a", "gi" ) ).length-1);

Sehingga ia mengambil tanda "A" dan "a" ... "g" tidak terlalu dibutuhkan, tapi Anda memang membutuhkan tanda "i"

Sarfraz
sumber
1
@Josh Itu tergantung pada apa yang disukai semua orang. Misalnya saya suka jawaban ini karena mudah dibaca. Tetapi orang lain akan lebih suka jawaban lain karena lebih teknis, atau menantang, orang lain akan lebih suka jawaban lain karena makan lebih sedikit cpu dan seterusnya .. itulah mengapa JavaScript sangat bagus, rasa kebebasan.
vdegenne
21

Gunakan RegEx untuk menghitung jumlah "a" dalam string.

var string = 'aajlkjjskdjfAlsj;gkejflksajfjskda';

document.write(string.match(/a/gi).length);

Izinkan saya menjelaskan cara kerjanya:

string.matchIni adalah metode RegEx. Ini mencari RegEx yang ditentukan di dalam string yang ditentukan (dalam hal ini, string "string").

(/a/gi)Ini adalah RegEx yang sebenarnya. Bunyinya, "temukan karakter a." Sangat sederhana. Ia juga membawa dua bendera, "g" dan "i". Huruf "g" mengatakan untuk menemukan SEMUA kemunculan karakter "a". Kalau tidak, ia hanya akan menemukan yang pertama, dan ia tidak akan pernah bisa melewati nomor satu. Bendera kedua adalah "i". Itu membuat RegEx cocok dengan semua kasus dari karakter itu. Jika flag (i) tidak ada, kode di atas hanya akan menghitung 4, karena akan melewati huruf besar "A" dalam string. Karena "i", itu akan cocok dengan huruf besar dan kecil. Hapus "i" jika Anda ingin mencocokkan huruf besar-kecil.

string.matchmengembalikan array dari semua pertandingan, jadi kami menggunakan lengthmetode untuk mengambil jumlah entri array. Sederhana seperti itu!

Drazzah
sumber
Saya pikir Anda harus menghapus i dari gi, itu adalah sumber kesalahan. Anda dapat menambahkannya sebagai bonus, tetapi dalam kasus saya, saya secara khusus mencari kecocokan case-sensitive.
Gismo Ranas
2
Masalahnya di sini adalah jika Anda tidak memiliki " a" di string, string.match(/a/gi)sama dengan nulldan Anda mendapatkan kesalahan Cannot read property 'length' of null.
pbialy
1
Bagian 'gi' sangat membantu, Pak @Drazzah
Jason Sebring
15

Menurut pendapat saya, akan lebih mudah dan aman untuk menghindari ekspresi reguler dalam kasus ini

Itu karena jika kita ingin dapat menghitung jenis karakter apa pun maka kita perlu mempertimbangkan dua ekspresi. Satu untuk umum karakter dan kedua untuk khusus karakter misalnya seperti [, ], ^dan sebagainya. Sangat mudah untuk melupakannya, tetapi bahkan jika kita mengingatnya, saya pikir kita tidak perlu memperluas kode kita.

Dalam kasus ini untuk string strdan karakter chberfungsi masing-masing solusi ini:

let count = str.split(ch).length - 1

(terima kasih kepada @Sarfraz )

atau

let count = str.split('').filter(x => x == ch).length

atau

let count = 0
str.split('').forEach(x => x == ch ? count++ : null)

Nikmati!

simhumileco.dll
sumber
4
var s = "dqsskjhfds";
alert(s.length - s.replace(/a/g, "").length); // number of 'a' in the string
Darin Dimitrov
sumber
1
var a = "acvbasbb";
var b= {};
for (let i=0;i<a.length;i++){
    if((a.match(new RegExp(a[i], "g"))).length > 1){
        b[a[i]]=(a.match(new RegExp(a[i], "g"))).length;
    }
}
console.log(b);
Nitin.
sumber
1
Meskipun cuplikan kode Anda mungkin menyelesaikan masalah, Anda harus menjelaskan apa tujuan kode Anda (bagaimana cara memecahkan masalah). Selanjutnya, Anda mungkin ingin memeriksa stackoverflow.com/help/how-to-answer
Ahmad F
@AhmadF Anda dapat menggunakan ini untuk> Berapa kali karakter muncul dalam string. dan ketika Anda menjalankan skrip ini, Anda akan mendapatkan objek dengan properti (karakter) yang muncul lebih dari sekali.
Nitin.