Gibt es eine einfache Möglichkeit zu überprüfen, wie oft ein Zeichen in einem String vorkommt?
Gibt es eine einfache Möglichkeit zu überprüfen, wie oft ein Zeichen in einem String vorkommt?
Antworten:
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 a
s drin sind str
.
let xLength = str.replace(/[^a || A]/g, "").length;
let xLength = str.replace(/[^aA]/g, "").length;
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"
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.match
Dies 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.match
Gibt ein Array aller Übereinstimmungen zurück, daher verwenden wir die length
Methode, um die Anzahl der Array-Einträge abzurufen. So einfach ist das!
a
" in haben string
, dann string.match(/a/gi)
gleich ist null
und Sie Fehler haben Cannot read property 'length' of null
.
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 str
und Zeichen ch
jede 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!
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);