web-dev-qa-db-fra.com

Javascript: combien de fois un caractère apparaît dans une chaîne

Existe-t-il un moyen simple de vérifier combien de fois un caractère apparaît dans une chaîne?

64
Ruth

Vous pouvez supprimer tout autre caractère de la chaîne et vérifier la longueur:

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

On compte ici le nombre de as dans str.

53
Gumbo

Ceci compte a dans l'exemple ci-dessous:

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

Si vous voulez insensible à la casse, vous voulez quelque chose comme

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

Il n'est donc pas nécessaire d'utiliser les drapeaux "A" et "a" ... "g"

29
Sarfraz

Utilisez un RegEx pour compter le nombre de "a" dans une chaîne.

var string = 'aajlkjjskdjfAlsj;gkejflksajfjskda';

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

Laissez-moi vous expliquer comment cela fonctionne:

string.match Ceci est une méthode RegEx. Il recherche le RegEx spécifié dans la chaîne spécifiée (dans ce cas, la chaîne "chaîne").

(/a/gi) Ceci est le RegEx réel. Il lit: "trouve le personnage a." C'est très simple. Il porte également deux drapeaux, le "g" et le "i". Le "g" dit de rechercher TOUTES les occurrences du caractère "a". Sinon, il ne trouverait que le premier et ne compterait jamais après le chiffre un. Le deuxième drapeau est "i". Cela fait que le RegEx correspond à tous les cas de ce personnage. Si ce drapeau (i) n'était pas là, le code ci-dessus ne compterait que 4, car il ignorerait la majuscule "A" dans la chaîne. En raison du "i", il correspondra aux majuscules et minuscules. Supprimez le "i" si vous souhaitez faire correspondre le cas des lettres.

string.match renvoie un tableau de toutes les correspondances. Nous utilisons donc la méthode length pour extraire le nombre d'entrées de tableau. Aussi simple que cela!

14
God is good

À mon avis, il est plus pratique et sûr d'éviter les expressions régulières dans ce cas

C'est parce que si nous voulons pouvoir compter n'importe quel type de caractères, nous devons considérer deux expressions. Un pour commun _ caractères et un second pour spécial caractères, tels que [, ], ^ et ainsi de suite. C'est facile à oublier, mais même si nous nous en souvenons, je pense que nous développons inutilement notre code.

Dans this case pour la chaîne str et le caractère ch, chacune de ces solutions fonctionne:

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

(merci à @Sarfraz )

ou

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

ou

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

Prendre plaisir!

4
simhumileco
var s = "dqsskjhfds";
alert(s.length - s.replace(/a/g, "").length); // number of 'a' in the string
3
Darin Dimitrov
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);
0
Nitin Tyagi