C'è un modo semplice per controllare quante volte un carattere appare in una stringa?
C'è un modo semplice per controllare quante volte un carattere appare in una stringa?
Risposte:
Puoi rimuovere qualsiasi altro carattere nella stringa e controllare la lunghezza:
str.replace(/[^a]/g, "").length
Qui viene contato quanti messaggi ci a
sono str
.
let xLength = str.replace(/[^a || A]/g, "").length;
let xLength = str.replace(/[^aA]/g, "").length;
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"
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.match
Questo è 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.match
restituisce un array di tutte le corrispondenze, quindi utilizziamo il length
metodo per recuperare il numero di voci dell'array. Semplice come quella!
a
" in string
, allora è string.match(/a/gi)
uguale null
e hai un errore Cannot read property 'length' of null
.
È 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 str
e carattere ch
funziona 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!
var s = "dqsskjhfds";
alert(s.length - s.replace(/a/g, "").length); // number of 'a' in the string
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);