JavaScript: quante volte un carattere si trova in una stringa?


Risposte:


82

Puoi rimuovere qualsiasi altro carattere nella stringa e controllare la lunghezza:

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

Qui viene contato quanti messaggi ci asono str.


1
Voglio solo sottolineare che puoi tenere conto anche delle maiuscole facendo let xLength = str.replace(/[^a || A]/g, "").length;
HappyHands31

@ HappyHands31 Vuoi direlet xLength = str.replace(/[^aA]/g, "").length;
Paperino

46

Questo conta a nell'esempio seguente:

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

Se vuoi che non faccia distinzione tra maiuscole e minuscole vorresti qualcosa di simile

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

In modo che afferri il flag "A" e "a" ... "g" non è realmente necessario, ma è necessario il flag "i"


1
@ Josh Dipende da ciò che piace a tutti. Ad esempio, questa risposta mi piace perché è facile da leggere. Ma qualcun altro preferirà un'altra risposta perché è più tecnica, o impegnativa, un'altra persona preferirà un'altra risposta perché mangia meno CPU e così via .. ecco perché JavaScript è così bello, un assaggio di libertà.
vdegenne

21

Usa una RegEx per contare il numero di "a" in una stringa.

var string = 'aajlkjjskdjfAlsj;gkejflksajfjskda';

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

Lascia che ti spieghi come funziona:

string.matchQuesto è un metodo RegEx. Cerca la RegEx specificata all'interno della stringa specificata (in questo caso, la stringa "stringa").

(/a/gi)Questa è la RegEx effettiva. Si legge, "trova il carattere a". È molto semplice. Porta anche due flag, la "g" e la "i". La "g" dice di trovare TUTTE le occorrenze del carattere "a". Altrimenti troverebbe solo il primo e non conterebbe mai oltre il numero uno. La seconda bandiera è "i". Fa sì che la RegEx corrisponda a tutti i casi di quel carattere. Se quel flag (i) non fosse lì, il codice sopra conterebbe solo 4, perché salterebbe la "A" maiuscola nella stringa. A causa della "i", corrisponderà alle lettere maiuscole e minuscole. Rimuovi la "i" se desideri far corrispondere le maiuscole.

string.matchrestituisce un array di tutte le corrispondenze, quindi utilizziamo il lengthmetodo per recuperare il numero di voci dell'array. Semplice come quella!


Penso che dovresti rimuovere i da gi, è una fonte di errori. Puoi aggiungerlo come bonus, ma nel mio caso stavo cercando specificamente una corrispondenza con distinzione tra maiuscole e minuscole.
Gismo Ranas

2
il problema qui è che se non hai " a" in string, allora è string.match(/a/gi)uguale nulle hai un errore Cannot read property 'length' of null.
pbialy

1
La parte "gi" è stata molto utile, Sir @Drazzah
Jason Sebring

15

A mio parere è più comodo e sicuro evitare le espressioni regolari in questo caso

È perché se vogliamo essere in grado di contare qualsiasi tipo di carattere, dobbiamo considerare due espressioni. Uno per comuni caratteri e la seconda per speciali caratteri, ad esempio, come [, ], ^e così via. È facile dimenticarsene, ma anche se lo ricordiamo, penso che stiamo espandendo inutilmente il nostro codice.

In questo caso per stringa stre carattere chfunziona ciascuna di queste soluzioni:

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

(grazie a @Sarfraz )

o

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

o

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

Godere!


4
var s = "dqsskjhfds";
alert(s.length - s.replace(/a/g, "").length); // number of 'a' in the string

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);

1
Sebbene lo snippet di codice possa risolvere il problema, dovresti descrivere qual è lo scopo del tuo codice (come risolve il problema). Inoltre, potresti voler controllare stackoverflow.com/help/how-to-answer
Ahmad F

@AhmadF puoi usarlo per> Quante volte un carattere si trova in una stringa. e quando esegui questo script otterrai un oggetto con proprietà (caratteri) che ricorrono più di una volta.
Nitin.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.