JavaScript: combien de fois un caractère apparaît-il dans une chaîne?

Réponses:

76

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

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

Ici, le nombre de as est compté str.

Gombo
la source
1
Je veux juste souligner que vous pouvez également tenir compte des majuscules en faisant let xLength = str.replace(/[^a || A]/g, "").length;
HappyHands31
@ HappyHands31 You meanlet xLength = str.replace(/[^aA]/g, "").length;
Donald Duck
43

Cela 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 être insensible à la casse, vous voudrez quelque chose comme

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

Pour qu'il attrape le drapeau "A" et "a" ... "g" n'est pas vraiment nécessaire, mais vous avez besoin du drapeau "i"

Sarfraz
la source
1
@Josh Cela dépend de ce que tout le monde aime. Par exemple, j'aime cette réponse car elle est facile à lire. Mais quelqu'un d'autre préférera une autre réponse car c'est plus technique, ou stimulant, une autre personne préférera une autre réponse car elle mange moins de CPU et ainsi de suite .. c'est pourquoi JavaScript est si agréable, un goût de liberté.
vdegenne
18

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.matchIl s'agit d'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, "trouver le caractère a." C'est très simple. Il porte également deux drapeaux, le "g" et le "i". Le "g" dit de trouver TOUTES les occurrences du caractère "a". Sinon, il ne trouverait que le premier, et il ne compterait jamais au-delà du numéro un. Le deuxième drapeau est "i". Cela fait correspondre le RegEx à tous les cas de ce caractère. Si cet indicateur (i) n'était pas là, le code ci-dessus ne compterait que 4, car il ignorerait le «A» majuscule dans la chaîne. En raison du "i", il correspondra aux majuscules et minuscules. Supprimez le «i» si vous souhaitez faire correspondre la casse des lettres.

string.matchrenvoie un tableau de toutes les correspondances, nous utilisons donc la lengthméthode pour récupérer le nombre d'entrées du tableau. Aussi simple que cela!

Drazzah
la source
Je pense que vous devriez supprimer le i de gi, c'est une source d'erreurs. Vous pouvez l'ajouter en bonus, mais dans mon cas, je recherchais spécifiquement une correspondance sensible à la casse.
Gismo Ranas
1
le problème ici est que si vous n'avez pas " a" dans string, alors string.match(/a/gi)égal nullet vous avez une erreur Cannot read property 'length' of null.
pbialy
1
La partie `` gi '' a été très utile, Sir @Drazzah
Jason Sebring
11

À 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 des caractères et seconde pour spéciaux caractères par exemple comme [, ], ^et ainsi de suite. C'est facile de l'oublier, mais même si nous nous en souvenons, je pense que nous étendons inutilement notre code.

Dans ce cas pour la chaîne stret le caractère chfonctionne chacune de ces solutions:

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!

simhumileco
la source
4
var s = "dqsskjhfds";
alert(s.length - s.replace(/a/g, "").length); // number of 'a' in the string
Darin Dimitrov
la source
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.
la source
1
Bien que votre extrait de code puisse résoudre le problème, vous devez décrire le but de votre code (comment il résout le problème). De plus, vous voudrez peut-être vérifier stackoverflow.com/help/how-to-answer
Ahmad F
@AhmadF vous pouvez utiliser ceci pour> Combien de fois un caractère apparaît dans une chaîne. et lorsque vous exécuterez ce script, vous obtiendrez un objet avec des propriétés (caractères) qui se produit plusieurs fois.
Nitine.