JavaScript: Wie oft kommt ein Zeichen in einer Zeichenfolge vor?

Antworten:

76

Sie können jedes andere Zeichen in der Zeichenfolge entfernen und die Länge überprüfen:

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

Hier wird gezählt, wie viele as drin sind str.

Gumbo
quelle
1
let xLength = str.replace(/[^a || A]/g, "").length;
Ich
@ HappyHands31 Du meinstlet xLength = str.replace(/[^aA]/g, "").length;
Donald Duck
43

Dies gilt a im folgenden Beispiel:

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

Wenn Sie die Groß- und Kleinschreibung nicht berücksichtigen möchten, möchten Sie so etwas wie

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

Damit es das Flag "A" und "a" ... "g" erfasst, wird es nicht wirklich benötigt, aber Sie benötigen das Flag "i"

Sarfraz
quelle
1
@ Josh Es kommt darauf an, was jeder mag. Zum Beispiel mag ich diese Antwort, weil sie leicht zu lesen ist. Aber jemand anderes wird eine andere Antwort bevorzugen, weil sie technischer oder herausfordernder ist. Eine andere Person wird eine andere Antwort bevorzugen, weil sie weniger CPU frisst und so weiter. Deshalb ist JavaScript so schön, ein Hauch von Freiheit.
Vdegenne
18

Verwenden Sie einen RegEx, um die Anzahl der "a" in einer Zeichenfolge zu zählen.

var string = 'aajlkjjskdjfAlsj;gkejflksajfjskda';

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

Lassen Sie mich erklären, wie das funktioniert:

string.matchDies ist eine RegEx-Methode. Es sucht nach dem angegebenen RegEx in der angegebenen Zeichenfolge (in diesem Fall der Zeichenfolge "Zeichenfolge").

(/a/gi)Dies ist der eigentliche RegEx. Es lautet: "Finde das Zeichen a." Es ist sehr einfach. Es trägt auch zwei Flags, das "g" und das "i". Das "g" sagt, dass ALLE Vorkommen des Zeichens "a" gefunden werden sollen. Andernfalls würde es nur den ersten finden und niemals über die Nummer eins hinaus zählen. Die zweite Flagge ist "i". Dadurch stimmt der RegEx mit allen Fällen dieses Zeichens überein. Wenn dieses Flag (i) nicht vorhanden wäre, würde der obige Code nur 4 zählen, da der Großbuchstabe "A" in der Zeichenfolge übersprungen würde. Aufgrund des "i" wird es mit Groß- und Kleinschreibung übereinstimmen . Entfernen Sie das "i", wenn Sie mit der Groß- und Kleinschreibung übereinstimmen möchten.

string.matchGibt ein Array aller Übereinstimmungen zurück, daher verwenden wir die lengthMethode, um die Anzahl der Array-Einträge abzurufen. So einfach ist das!

Drazzah
quelle
Ich denke, Sie sollten das i von gi entfernen, es ist eine Fehlerquelle. Sie können es als Bonus hinzufügen, aber in meinem Fall habe ich speziell nach Übereinstimmungen gesucht, bei denen die Groß- und Kleinschreibung beachtet wird.
Gismo Ranas
1
Das Problem hier ist, dass, wenn Sie nicht " a" in haben string, dann string.match(/a/gi)gleich ist nullund Sie Fehler haben Cannot read property 'length' of null.
pbialy
1
Der 'gi'-Teil war sehr hilfreich, Sir @Drazzah
Jason Sebring,
10

Meiner Meinung nach ist es in diesem Fall bequemer und sicherer, reguläre Ausdrücke zu vermeiden

Denn wenn wir in der Lage sein wollen, jede Art von Zeichen zu zählen, müssen wir zwei Ausdrücke berücksichtigen. Ein für gemeinsame Zeichen und die zweite für spezielles Zeichen zum Beispiel wie [, ], ^und so weiter. Es ist leicht, es zu vergessen, aber selbst wenn wir uns daran erinnern, denken wir, dass wir unseren Code unnötig erweitern.

In diesem Fall funktioniert für Zeichenfolge strund Zeichen chjede dieser Lösungen:

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

(danke an @Sarfraz )

oder

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

oder

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

Genießen!

simhumileco
quelle
3
var s = "dqsskjhfds";
alert(s.length - s.replace(/a/g, "").length); // number of 'a' in the string
Darin Dimitrov
quelle
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.
quelle
1
Obwohl Ihr Code-Snippet das Problem möglicherweise löst, sollten Sie beschreiben, wozu Ihr Code dient (wie er das Problem löst). Darüber hinaus möchten Sie vielleicht stackoverflow.com/help/how-to-answer
Ahmad F
@AhmadF Sie können dies verwenden für> Wie oft ein Zeichen in einer Zeichenfolge vorkommt. Wenn Sie dieses Skript ausführen, erhalten Sie ein Objekt mit Eigenschaften (Zeichen), das mehrmals vorkommt.
Nitin.