Wie zählt das Auftreten von Zeichenfolgen in Zeichenfolgen?


608

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'

19
Dies hängt davon ab, ob Sie überlappende Instanzen akzeptieren , z. B. var t = "sss". Wie viele Instanzen des Teilstrings "ss" befinden sich in der obigen Zeichenfolge? 1 oder 2? Springen Sie über jede Instanz oder bewegen Sie den Zeiger zeichenweise, um nach der Teilzeichenfolge zu suchen?
Tim

4
Ein verbesserter Benchmark für die Antworten dieser Frage: jsperf.com/string-ocurrence-split-vs-match/2 (basierend auf dem Benchmark von Kazzkiq).
idmean

Antworten:


1028

Der greguläre Ausdruck (kurz für global ) besagt, dass die gesamte Zeichenfolge durchsucht werden soll, anstatt nur das erste Vorkommen zu finden. Das passt iszweimal zusammen:

var temp = "This is a string.";
var count = (temp.match(/is/g) || []).length;
console.log(count);

Und wenn es keine Übereinstimmungen gibt, wird Folgendes zurückgegeben 0:

var temp = "Hello World!";
var count = (temp.match(/is/g) || []).length;
console.log(count);


3
modern und elegant, aber die Lösung von Vitimtk ist viel effizienter. Was haltet ihr alle von seinem Code?
TruMan1

5
Dies beantwortet die Frage am besten. Wenn jemand fragen würde "Wie kann ich das in besonderen Fällen 10x schneller machen (ohne reguläre Ausdrücke)", würde Vitimtk diese Frage gewinnen.
Dzhaughn

121
Danke dafür. Ich habe mich count = (str.match(/is/g) || []).lengthdarum gekümmert, wenn du kein Match hast.
Matt

6
Ich denke nicht, dass diese Antwort richtig mit der Frage übereinstimmt, da keine Zeichenfolge als Argument für die Übereinstimmung erforderlich ist, wie im Anwendungsfall beschrieben. Natürlich können Sie den regulären Ausdruck dynamisch mithilfe des RegExpKonstruktors 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.
ZER0

3
Matts Antwort sollte in der Antwort sein!
Senči

240
/** Function that count occurrences of a substring in a string;
 * @param {String} string               The string
 * @param {String} subString            The sub string to search for
 * @param {Boolean} [allowOverlapping]  Optional. (Default:false)
 *
 * @author Vitim.us https://gist.github.com/victornpb/7736865
 * @see Unit Test https://jsfiddle.net/Victornpb/5axuh96u/
 * @see http://stackoverflow.com/questions/4009756/how-to-count-string-occurrence-in-string/7924240#7924240
 */
function occurrences(string, subString, allowOverlapping) {

    string += "";
    subString += "";
    if (subString.length <= 0) return (string.length + 1);

    var n = 0,
        pos = 0,
        step = allowOverlapping ? 1 : subString.length;

    while (true) {
        pos = string.indexOf(subString, pos);
        if (pos >= 0) {
            ++n;
            pos += step;
        } else break;
    }
    return n;
}

Verwendungszweck

occurrences("foofoofoo", "bar"); //0

occurrences("foofoofoo", "foo"); //3

occurrences("foofoofoo", "foofoo"); //1

allowOverlapping

occurrences("foofoofoo", "foofoo", true); //2

Streichhölzer:

  foofoofoo
1 `----´
2    `----´

Gerätetest

Benchmark

Ich habe einen Benchmark-Test durchgeführt und meine Funktion ist mehr als zehnmal schneller als die von gumbo veröffentlichte Regexp-Match-Funktion. In meinem Teststring ist 25 Zeichen lang. mit 2 Vorkommen des Zeichens 'o'. Ich habe 1 000 000 Mal in Safari ausgeführt.

Safari 5.1

Benchmark> Gesamtzeitausführung: 5617 ms (regulärer Ausdruck)

Benchmark> Gesamtzeitausführung: 881 ms (meine Funktion 6,4x schneller)

Firefox 4

Benchmark> Gesamtzeitausführung: 8547 ms (Rexexp)

Benchmark> Gesamtzeitausführung: 634 ms (meine Funktion 13,5x schneller)


Bearbeiten: Änderungen, die ich vorgenommen habe

  • Länge des zwischengespeicherten Teilstrings

  • Typ-Casting zum String hinzugefügt.

  • optionaler Parameter 'allowOverlapping' hinzugefügt

  • Die korrekte Ausgabe für den leeren Teilstring-Fall wurde behoben.

Kern

5
Ich habe diesen Test in Safari 5 wiederholt und ähnliche Ergebnisse mit einer kleinen (100b) Zeichenfolge erzielt, aber mit einer größeren Zeichenfolge (16kb) lief der reguläre Ausdruck für mich schneller. Für eine Iteration (nicht 1.000.000) betrug der Unterschied ohnehin weniger als eine Millisekunde, daher geht meine Stimme an den regulären Ausdruck.
Arlomedia

2
+1, aber Sie überprüfen substring.lengthfast jede Schleife, sollten Sie in Betracht ziehen, sie außerhalb derwhile
ajax333221

1
@ Ajax333221 OMG Sie haben meine Gedanken gelesen, ich habe diese Verbesserung vor ein paar Tagen gemacht, und ich wollte meine Antwort jsperf.com/count-string-occurrence-in-string
Vitim.us

4
Ich habe Ihren Code hier gefunden: success-equation.com/mind_reader.html . Wirklich nett, dass der Programmierer darauf bedacht war, dort eine Referenz zu setzen.
Bruno Kim

3
@DanielZuzevich es wird die Typen zu String zwingen , falls Sie dies tun occurrences(11,1) //2und es würde immer noch funktionieren. (Es ist schneller auf diese Weise, anstatt nach Typen zu
suchen

112
function countInstances(string, word) {
   return string.split(word).length - 1;
}

4
Dies ist ein unsicherer / ungenauer Ansatz, zum Beispiel : countInstances("isisisisisis", "is") === 0.
Nick Craver

5
@Antal - Sieht aus wie ein Fehler in der vorherigen Beta-Version von Chrome, funktioniert nach dem Update auf den neuesten Stand. Ich würde mich jedoch immer noch von dieser Methode fernhalten.
Nick Craver

28
Dies scheint mir eine absolut gültige Lösung zu sein.
Gregor Schmidt

2
@NickCraver aus Neugier, warum willst du dich von dieser Methode fernhalten? (außer Fehler in Ihrem Beta-Browser)
Jonny Lin

6
@JonnyLin Es werden unnötige Zuordnungen erstellt, die Sie sofort wegwerfen, wenn Alternativen dies nicht tun - möglicherweise sehr große, abhängig von den Daten.
Nick Craver

88

Sie können dies versuchen:

var theString = "This is a string.";
console.log(theString.split("is").length - 1);


14
+1 für die Einfachheit und weil entsprechend meinen Tests diese Lösung ~ 10x schneller läuft als die anderen!
Claudio Holanda

Zum Beispiel habe ich zwei "ist", wie bekommt man die Position von jedem?
Rapidoodle

Wie in der Antwort von @Orbit erläutert, erzielen Benutzer bei älteren Chrome-Versionen unterschiedliche Ergebnisse. Ich wäre mit dieser Methode vielleicht etwas vorsichtig.
mgthomas99

Und Sie können es auch mit Variablen verwenden: theString.split(myvar).length - 1die Sie mit einfachen Regex nicht können
Steffan

4
Dies ist @Orbits Antwort drei Jahre später ...
Aloisdg wechselt zu codidact.com

33

Meine Lösung:

var temp = "This is a string.";

function countOcurrences(str, value) {
  var regExp = new RegExp(value, "gi");
  return (str.match(regExp) || []).length;
}

console.log(countOcurrences(temp, 'is'));


5
Vielleicht wäre es besser, (str.match (regExp) || []) zurückzugeben. length; Auf diese Weise bewerten Sie den regulären Ausdruck nicht zweimal?
Aikeru

2
Sie müssen auch Ihre Schnur scape oder countOcurrences('Hello...','.')==8und nicht 3
Vitim.us

19

Sie können verwenden match, um eine solche Funktion zu definieren:

String.prototype.count = function(search) {
    var m = this.match(new RegExp(search.toString().replace(/(?=[.\\+*?[^\]$(){}\|])/g, "\\"), "g"));
    return m ? m.length:0;
}

1
Wenn Sie möchten, dass es mit der Suchsemantik von JS einheitlich ist, wäre die Rückgabezeile return m ? m.length:-1;.
Conor O'Brien

Dies ist besser als die anderen oben genannten Regex-Lösungen, da sie einen Fehler verursachen, wenn die Zeichenfolge zum Zählen der Vorkommen von "[" oder etwas mit einer besonderen Bedeutung in Regex ist.
Programmierer5000

11

Die Nicht-Regex-Version:

 var string = 'This is a string',
    searchFor = 'is',
    count = 0,
    pos = string.indexOf(searchFor);

while (pos > -1) {
    ++count;
    pos = string.indexOf(searchFor, ++pos);
}

console.log(count);   // 2


1. Es ist nur für die Suche nach einzelnen is
Zeichen

1
Dies ist wahrscheinlich die schnellste Implementierung hier, aber es wäre noch schneller, wenn Sie "++ pos" durch "pos + = searchFor.length"
ersetzen würden



8

Hier ist die schnellste Funktion!

Warum ist es schneller?

  • Überprüft nicht char für char (mit 1 Ausnahme)
  • Verwendet eine Weile und erhöht 1 var (die Zeichenanzahl var) gegenüber einer for-Schleife, die die Länge überprüft und 2 vars erhöht (normalerweise var i und eine var mit der Zeichenanzahl).
  • Verwendet viel weniger Vars
  • Verwendet keinen regulären Ausdruck!
  • Verwendet eine (hoffentlich) hochoptimierte Funktion
  • Alle Vorgänge sind so kombiniert wie möglich, um Verlangsamungen aufgrund mehrerer Vorgänge zu vermeiden

    String.prototype.timesCharExist=function(c){var t=0,l=0,c=(c+'')[0];while(l=this.indexOf(c,l)+1)++t;return t};

Hier ist eine langsamere und besser lesbare Version:

    String.prototype.timesCharExist = function ( chr ) {
        var total = 0, last_location = 0, single_char = ( chr + '' )[0];
        while( last_location = this.indexOf( single_char, last_location ) + 1 )
        {
            total = total + 1;
        }
        return total;
    };

Dieser ist langsamer wegen des Zählers, der langen Variablennamen und des Missbrauchs von 1 Var.

Um es zu benutzen, machen Sie einfach folgendes:

    'The char "a" only shows up twice'.timesCharExist('a');

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:

    String.prototype.timesCharExist=function(c){var t=0,l=0,c=(c+'')[0];while(l=this.indexOf(c,l)+1)++t;return t};

    var x=Array(100001).join('1234567890');

    console.time('proto');x.timesCharExist('1');console.timeEnd('proto');

    console.time('regex');x.match(/1/g).length;console.timeEnd('regex');

    var timesCharExist=function(x,c){var t=0,l=0,c=(c+'')[0];while(l=x.indexOf(c,l)+1)++t;return t;};

    console.time('func');timesCharExist(x,'1');console.timeEnd('func');

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+''


1
Der Prototyp war ein Beispiel! Sie können die Funktion nach Belieben nutzen! Sie können dies sogar tun: var timesFunctionExist = Funktion (x, c) {var t = 0, l = 0, c = (c + '') [0]; während (l = x.indexOf (c, l) +1 ) ++ t; return t}); alert (timesCharExist ('Das Zeichen "a" wird nur zweimal angezeigt', 'a'));! (Dies wird etwas schneller, weil ich nicht mit Prototypen herumspielen werde). Wenn du denkst, ich liege falsch, warum zeigst du es nicht, bevor du Steine ​​auf mich wirfst? Beweise mir, dass meine Funktion scheiße ist und ich sie akzeptieren werde. Zeigen Sie mir einen Testfall. Und die Länge der Vars hat Einfluss auf die Geschwindigkeit. Sie können es testen.
Ismael Miguel


4

Ich denke, der Zweck von Regex unterscheidet sich stark von indexOf. indexOfFinden 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:

 var index = "This is a string".indexOf("is");
 console.log(index);
 var length = "This is a string".match(/[a-z]/g).length;
 // where [a-z] is a regex wildcard expression thats why its slower
 console.log(length);


3

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.

String.prototype.count = function(substr,start,overlap) {
    overlap = overlap || false;
    start = start || 0;

    var count = 0, 
        offset = overlap ? 1 : substr.length;

    while((start = this.indexOf(substr, start) + offset) !== (offset - 1))
        ++count;
    return count;
};

3
       var myString = "This is a string.";
        var foundAtPosition = 0;
        var Count = 0;
        while (foundAtPosition != -1)
        {
            foundAtPosition = myString.indexOf("is",foundAtPosition);
            if (foundAtPosition != -1)
            {
                Count++;
                foundAtPosition++;
            }
        }
        document.write("There are " + Count + " occurrences of the word IS");

Siehe: - Zählen Sie einen Teilstring, der in der Zeichenfolge angezeigt wird, um eine schrittweise Erklärung zu erhalten.


3

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? )

function keywordOccurrences(string, subString, allowOverlapping, caseInsensitive, wholeWord)
{

    string += "";
    subString += "";
    if (subString.length <= 0) return (string.length + 1); //deal with empty strings

    if(caseInsensitive)
    {            
        string = string.toLowerCase();
        subString = subString.toLowerCase();
    }

    var n = 0,
        pos = 0,
        step = allowOverlapping ? 1 : subString.length,
        stringLength = string.length,
        subStringLength = subString.length;

    while (true)
    {
        pos = string.indexOf(subString, pos);
        if (pos >= 0)
        {
            var matchPos = pos;
            pos += step; //slide forward the position pointer no matter what

            if(wholeWord) //only whole word matches are desired
            {
                if(matchPos > 0) //if the string is not at the very beginning we need to check if the previous character is whitespace
                {                        
                    if(!/[\s\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&\(\)*+,\-.\/:;<=>?@\[\]^_`{|}~]/.test(string[matchPos - 1])) //ignore punctuation
                    {
                        continue; //then this is not a match
                    }
                }

                var matchEnd = matchPos + subStringLength;
                if(matchEnd < stringLength - 1)
                {                        
                    if (!/[\s\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&\(\)*+,\-.\/:;<=>?@\[\]^_`{|}~]/.test(string[matchEnd])) //ignore punctuation
                    {
                        continue; //then this is not a match
                    }
                }
            }

            ++n;                
        } else break;
    }
    return n;
}

Bitte zögern Sie nicht, diese Antwort zu ändern und umzugestalten, wenn Sie Fehler oder Verbesserungen entdecken.


3

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 :

function occurrences (haystack, needle) {
  var _needle = needle
    .replace(/\[/g, '\\[')
    .replace(/\]/g, '\\]')
  return (
    haystack.match(new RegExp('[' + _needle + ']', 'g')) || []
  ).length
}

3

function get_occurrence(varS,string){//Find All Occurrences
        c=(string.split(varS).length - 1);
        return c;
    }
    temp="This is a string.";
    console.log("Total Occurrence is "+get_occurrence("is",temp));

Verwenden Sie get_occurrence (varS, string), um das Auftreten von Zeichen und Zeichenfolgen in einer Zeichenfolge zu ermitteln.


2

Versuch es

<?php 
$str = "33,33,56,89,56,56";
echo substr_count($str, '56');
?>

<script type="text/javascript">
var temp = "33,33,56,89,56,56";
var count = temp.match(/56/g);  
alert(count.length);
</script>


2

Niemand wird das jemals sehen, aber es ist gut, ab und zu Rekursions- und Pfeilfunktionen zurückzubringen (Wortspiel herrlich beabsichtigt)

String.prototype.occurrencesOf = function(s, i) {
 return (n => (n === -1) ? 0 : 1 + this.occurrencesOf(s, n + 1))(this.indexOf(s, (i || 0)));
};


1

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.

var search_value = "This is a dummy sentence!";
var letter = 'a'; /*Can take any letter, have put in a var if anyone wants to use this variable dynamically*/
letter = letter && "string" === typeof letter ? letter : "";
var count;
for (var i = count = 0; i < search_value.length; count += (search_value[i++] == letter));
console.log(count);

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!).


1

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

wordCount(text, word) {
    if (!text || !word) {
      return 0;
    }
    text = text.toLowerCase();
    word = word.toLowerCase();
    return ( text.split( word ).length - 1 );
}

0

Antwort für Leandro Batista: Nur ein Problem mit dem regulären Ausdruck.

 "use strict";
 var dataFromDB = "testal";
 
  $('input[name="tbInput"]').on("change",function(){
	var charToTest = $(this).val();
	var howManyChars = charToTest.length;
	var nrMatches = 0;
	if(howManyChars !== 0){
		charToTest = charToTest.charAt(0);
		var regexp = new RegExp(charToTest,'gi');
		var arrMatches = dataFromDB.match(regexp);
		nrMatches = arrMatches ? arrMatches.length : 0;
	}
		$('#result').html(nrMatches.toString());

  });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="main">
What do you wanna count <input type="text" name="tbInput" value=""><br />
Number of occurences = <span id="result">0</span>
</div>


0

var countInstances = function(body, target) {
  var globalcounter = 0;
  var concatstring  = '';
  for(var i=0,j=target.length;i<body.length;i++){
    concatstring = body.substring(i-1,j);
    
    if(concatstring === target){
       globalcounter += 1;
       concatstring = '';
    }
  }
  
  
  return globalcounter;
 
};

console.log(   countInstances('abcabc', 'abc')   ); // ==> 2
console.log(   countInstances('ababa', 'aba')   ); // ==> 2
console.log(   countInstances('aaabbb', 'ab')   ); // ==> 1


0

Ein bisschen spät, aber vorausgesetzt, wir haben die folgende Zeichenfolge:

var temp = "This is a string.";

Zuerst teilen wir uns auf, was auch immer Sie suchen, dies wird eine Reihe von Zeichenfolgen zurückgeben.

var array = temp.split("is");

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.

var occurrenceCount = array.length - 1;
alert(occurrenceCount); //should output '2'

Sie können dies auch in einer Zeile wie folgt tun:

alert("This is a string.".split("is").length - 1); //should output '2'

Hoffe es hilft: D.


1
Kann ich dies als doppelte Antwort markieren? Vielleicht sollten Sie alle Antworten lesen, bevor Sie Ihre eigenen angeben?
Michiel

2
Dies ist @Orbits Antwort acht Jahre später ...
Aloisdg wechselt zu codidact.com

1
Soll ich diese Antwort dann löschen?
Juan Enrique Segebre

0

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 ...

/**
 * Return the frequency of a substring in a string
 * @param {string} string - The string.
 * @param {string} string - The substring to count.
 * @returns {number} number - The frequency.
 * 
 * @author Drozerah https://gist.github.com/Drozerah/2b8e08d28413d66c3e63d7fce80994ce
 * @see https://stackoverflow.com/a/55670859/9370788
 */
const subStringCounter = (string, subString) => {

    let count = 0
    string.replace(new RegExp(subString, 'gi'), () => count++)
    return count
}

Verwendungszweck

subStringCounter("foofoofoo", "bar"); //0

subStringCounter("foofoofoo", "foo"); //3

0

bin auf diesen Beitrag gestoßen.

let str = 'As sly as a fox, as strong as an ox';

let target = 'as'; // let's look for it

let pos = 0;
while (true) {
  let foundPos = str.indexOf(target, pos);
  if (foundPos == -1) break;

  alert( `Found at ${foundPos}` );
  pos = foundPos + 1; // continue the search from the next position
}

Der gleiche Algorithmus kann kürzer angelegt werden:

let str = "As sly as a fox, as strong as an ox";
let target = "as";

let pos = -1;
while ((pos = str.indexOf(target, pos + 1)) != -1) {
  alert( pos );
}

0

substr_count übersetzt nach Javascript von PHP


function substr_count (haystack, needle, offset, length) { 
  // eslint-disable-line camelcase
  //  discuss at: https://locutus.io/php/substr_count/
  // original by: Kevin van Zonneveld (https://kvz.io)
  // bugfixed by: Onno Marsman (https://twitter.com/onnomarsman)
  // improved by: Brett Zamir (https://brett-zamir.me)
  // improved by: Thomas
  //   example 1: substr_count('Kevin van Zonneveld', 'e')
  //   returns 1: 3
  //   example 2: substr_count('Kevin van Zonneveld', 'K', 1)
  //   returns 2: 0
  //   example 3: substr_count('Kevin van Zonneveld', 'Z', 0, 10)
  //   returns 3: false

  var cnt = 0

  haystack += ''
  needle += ''
  if (isNaN(offset)) {
    offset = 0
  }
  if (isNaN(length)) {
    length = 0
  }
  if (needle.length === 0) {
    return false
  }
  offset--

  while ((offset = haystack.indexOf(needle, offset + 1)) !== -1) {
    if (length > 0 && (offset + needle.length) > length) {
      return false
    }
    cnt++
  }

  return cnt
}

Schauen Sie sich Locutus 'Übersetzung der Funktion substr_count von Php an


-2

Versuche dies:

function countString(str, search){
    var count=0;
    var index=str.indexOf(search);
    while(index!=-1){
        count++;
        index=str.indexOf(search,index+1);
    }
    return count;
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.