Wie kann ich zählen, wie oft eine bestimmte Zeichenfolge in einer anderen Zeichenfolge vorkommt? Zum Beispiel versuche ich Folgendes in Javascript zu tun:
var temp = "This is a string.";
alert(temp.count("is")); //should output '2'
javascript
regex
string
TruMan1
quelle
quelle
Antworten:
Der
g
reguläre Ausdruck (kurz für global ) besagt, dass die gesamte Zeichenfolge durchsucht werden soll, anstatt nur das erste Vorkommen zu finden. Das passtis
zweimal zusammen:Und wenn es keine Übereinstimmungen gibt, wird Folgendes zurückgegeben
0
:quelle
count = (str.match(/is/g) || []).length
darum gekümmert, wenn du kein Match hast.RegExp
Konstruktors erstellen und die gesuchte Zeichenfolge übergeben, aber in diesem Fall müssen Sie alle Metazeichen maskieren. In diesem Szenario ist ein reiner String-Ansatz vorzuziehen.Verwendungszweck
allowOverlapping
Streichhölzer:
Gerätetest
Benchmark
Kernquelle
substring.length
fast jede Schleife, sollten Sie in Betracht ziehen, sie außerhalb derwhile
occurrences(11,1) //2
und es würde immer noch funktionieren. (Es ist schneller auf diese Weise, anstatt nach Typen zuquelle
countInstances("isisisisisis", "is") === 0
.Sie können dies versuchen:
quelle
theString.split(myvar).length - 1
die Sie mit einfachen Regex nicht könnenMeine Lösung:
quelle
countOcurrences('Hello...','.')==8
und nicht 3Sie können verwenden
match
, um eine solche Funktion zu definieren:quelle
return m ? m.length:-1;
.Die Nicht-Regex-Version:
quelle
is
Nur Code-Golf Rebecca Chernoff ‚s Lösung :-)
quelle
Dies wird 2 zurückgeben.
quelle
Hier ist die schnellste Funktion!
Warum ist es schneller?
Alle Vorgänge sind so kombiniert wie möglich, um Verlangsamungen aufgrund mehrerer Vorgänge zu vermeiden
Hier ist eine langsamere und besser lesbare Version:
Dieser ist langsamer wegen des Zählers, der langen Variablennamen und des Missbrauchs von 1 Var.
Um es zu benutzen, machen Sie einfach folgendes:
Bearbeiten: (16.12.2013)
NICHT mit Opera 12.16 oder älter verwenden! Es dauert fast 2,5x mehr als die Regex-Lösung!
Auf Chrom dauert diese Lösung zwischen 14 ms und 20 ms für 1.000.000 Zeichen.
Die Regex-Lösung benötigt 11-14 ms für die gleiche Menge.
Die Verwendung einer Funktion (außerhalb
String.prototype
) dauert ca. 10-13 ms.Hier ist der verwendete Code:
Das Ergebnis aller Lösungen sollte 100.000 sein!
Hinweis: Wenn diese Funktion mehr als 1 Zeichen zählen soll, ändern Sie die Position
c=(c+'')[0]
inc=c+''
quelle
quelle
Ich denke, der Zweck von Regex unterscheidet sich stark von
indexOf
.indexOf
Finden Sie einfach das Vorkommen einer bestimmten Zeichenfolge, während Sie in Regex Platzhalter verwenden können,[A-Z]
was bedeutet, dass jedes Großbuchstaben im Wort gefunden wird, ohne das tatsächliche Zeichen anzugeben .Beispiel:
quelle
Super duper alt, aber ich musste heute so etwas machen und dachte nur daran, SO danach zu überprüfen. Funktioniert ziemlich schnell für mich.
quelle
Siehe: - Zählen Sie einen Teilstring, der in der Zeichenfolge angezeigt wird, um eine schrittweise Erklärung zu erhalten.
quelle
Aufbauend auf der obigen Antwort von @ Vittim.us. Ich mag die Kontrolle, die mir seine Methode gibt und die es einfach macht, sie zu erweitern, aber ich musste Groß- und Kleinschreibung nicht berücksichtigen und Übereinstimmungen auf ganze Wörter beschränken, um die Interpunktion zu unterstützen. (zB "Bad" ist in "Bad nehmen", aber nicht "Baden")
Der reguläre Satzzeichen für Interpunktion stammt von: https://stackoverflow.com/a/25575009/497745 ( Wie kann ich mit Regex alle Satzzeichen aus einem String in JavaScript entfernen? )
Bitte zögern Sie nicht, diese Antwort zu ändern und umzugestalten, wenn Sie Fehler oder Verbesserungen entdecken.
quelle
Beachten Sie für alle, die diesen Thread in Zukunft finden, dass die akzeptierte Antwort nicht immer den richtigen Wert zurückgibt, wenn Sie ihn verallgemeinern, da er Regex-Operatoren wie
$
und erstickt.
. Hier ist eine bessere Version, die mit jeder Nadel umgehen kann :quelle
Verwenden Sie get_occurrence (varS, string), um das Auftreten von Zeichen und Zeichenfolgen in einer Zeichenfolge zu ermitteln.
quelle
Versuch es
quelle
Einfache Version ohne Regex:
quelle
Niemand wird das jemals sehen, aber es ist gut, ab und zu Rekursions- und Pfeilfunktionen zurückzubringen (Wortspiel herrlich beabsichtigt)
quelle
Versuche dies
Fiddle Link: https://jsfiddle.net/rajaramtt/gn0dtsjc/1/
quelle
Dies ist ein sehr alter Thread, auf den ich gestoßen bin, aber da viele ihre Antworten gepusht haben, ist hier meiner in der Hoffnung, jemandem mit diesem einfachen Code zu helfen.
Ich bin mir nicht sicher, ob es die schnellste Lösung ist, aber ich habe es der Einfachheit halber und weil ich keinen regulären Ausdruck verwende (ich mag es einfach nicht, sie zu verwenden!).
quelle
Diese Funktion gibt die Anzahl der Vorkommen eines Wortes im Text zurück.
Beachten Sie, dass wir toLowerCase verwenden, um die Anzahl der Vorkommen unabhängig vom Format (Groß- und Kleinschreibung ...) des Wortes und des Textes zu berechnen
quelle
Antwort für Leandro Batista: Nur ein Problem mit dem regulären Ausdruck.
quelle
quelle
Ein bisschen spät, aber vorausgesetzt, wir haben die folgende Zeichenfolge:
Zuerst teilen wir uns auf, was auch immer Sie suchen, dies wird eine Reihe von Zeichenfolgen zurückgeben.
Dann erhalten wir die Länge und subtrahieren 1 davon, da split standardmäßig ein Array der Größe 1 verwendet und folglich seine Größe jedes Mal erhöht, wenn es ein Vorkommen findet.
Sie können dies auch in einer Zeile wie folgt tun:
Hoffe es hilft: D.
quelle
Diese Lösung basiert auf der
.replace()
Methode, die eine RegEx als ersten Parameter und eine Funktion als zweiten Parameter akzeptiert , die wir als Abschluss zum Inkrementieren eines Zählers verwenden können ...Verwendungszweck
quelle
bin auf diesen Beitrag gestoßen.
Der gleiche Algorithmus kann kürzer angelegt werden:
quelle
substr_count
übersetzt nach Javascript von PHPSchauen Sie sich Locutus 'Übersetzung der Funktion substr_count von Php an
quelle
Versuche dies:
quelle