8. Unterrichtsblock

JavaScript-String-Suche

JavaScript-Suchmethoden

JavaScript-String indexOf()

Die indexOf()Methode gibt den Index (Position von) des ersten Vorkommens eines Strings in einem String zurück:

let str = "Brautkleid bleibt Brautkleid und Blaukraut bleibt Blaukraut";
str.indexOf("bleibt");

Beispiel:

Die Position des ersten Vorkommens von „bleibt“ ist:

Erinnerung: JavaScript zählt Positionen ab Null. 0 ist die erste Position in einem String, 1 die zweite, 2 die dritte, …

JavaScript-String lastIndexOf()

Die lastIndexOf()Methode gibt den Index des letzten Vorkommens eines angegebenen Textes in einer Zeichenfolge zurück:

let text = "Brautkleid bleibt Brautkleid und Blaukraut bleibt Blaukraut";
text.lastIndexOf("bleibt");

Beide Methoden indexOf(), und lastIndexOf()geben -1 zurück, wenn der Text nicht gefunden wird:

let text = "Brautkleid bleibt Brautkleid und Blaukraut bleibt Blaukraut";
text.lastIndexOf("Bratwurst");

Beide Methoden akzeptieren einen zweiten Parameter als Startposition für die Suche:

let text = "Brautkleid bleibt Brautkleid und Blaukraut bleibt Blaukraut";
text.indexOf("bleibt", 18);

Beispiel

Die Methode startet in folgendem Beispiel auf Position 18, sucht die nächst passende Übereinstimmung und gibt die Position des ersten Zeichens der Übereinstimmung aus.

Die lastIndexOf()Methoden suchen rückwärts (vom Ende zum Anfang), was bedeutet: Wenn der zweite Parameter ist 15, beginnt die Suche an Position 15 und sucht bis zum Anfang der Zeichenfolge.

let text2 = "Brautkleid bleibt Brautkleid und Blaukraut bleibt Blaukraut";
text2.lastIndexOf("bleibt", 42);

Beispiel

Aufgabe

Lasse Dir die erste und die letzte Position des Wortes „Apfel“ aus folgendem Text ausgeben:

Lorem ipsum Apfel sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam Apfel. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem Apfel dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero Apfel et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

Die search()Methode durchsucht eine Zeichenfolge nach einer Zeichenfolge (oder einem regulären Ausdruck) und gibt die Position der Übereinstimmung zurück:

let text3 = "Brautkleid bleibt Brautkleid und Blaukraut bleibt Blaukraut";
text3.search("bleibt");
let text4 = "Brautkleid bleibt Brautkleid und Blaukraut bleibt Blaukraut";
text4.search(/bleibt/);

Hinweis

Die beiden Methoden indexOf()und search()scheinen gleich zu sein. Sie akzeptieren die gleichen Argumente (Parameter) und geben den anscheinend den gleichen Wert zurück.

Die beiden Methoden sind jedoch NICHT gleich. Das sind die Unterschiede:

  • Die search()Methode kann kein zweites Startpositionsargument annehmen.
  • Die indexOf()Methode kann keine umfangreichen Suchwerte (möglich durch reguläre Ausdrücke) annehmen.

JavaScript-String match()

Die match()Methode gibt ein Array zurück, das die Ergebnisse des Abgleichs einer Zeichenfolge mit einer Zeichenfolge (oder eines regulären Ausdrucks) enthält.

Wir führen eine Suche nach „au“ durch:

// match() kann wie folgt verwendet werden:

let text5 = "Brautkleid bleibt Brautkleid und Blaukraut bleibt Blaukraut";
text5.match("au");

let text6 = "Brautkleid bleibt Brautkleid und Blaukraut bleibt Blaukraut";
text6.match(/au/);

Aufgabe

Lasse Dir die Länge und den Inhalt des Arrays ausgeben, der durch die Methode match("au") und match(/au/)mit o.g. Code-Beispiel erzeugt wird.

Hilfe zur Messung von String-Längen: https://webentwicklerkurs.de/2-jahr/javascript/7-unterrichtsblock/#strings
Hilfe zur Ausgabe von Arrays: https://webentwicklerkurs.de/2-jahr/javascript/4-unterrichtsblock/#arrays

Richtiges Ergebnis: 1 au

So führt man eine globale Suche nach „au“ durch:

let text7 = "Brautkleid bleibt BRAUTKLEID und BLAUKRAUT bleibt Blaukraut";
text7.match(/au/g);

So führt man eine globale Suche ohne Berücksichtigung der Groß-/Kleinschreibung nach „au“ durch:

let text8 = "Brautkleid bleibt BRAUTKLEID und BLAUKRAUT bleibt Blaukraut";
text8.match(/au/gi);

Aufgabe

Lasse Dir erneut die Länge und den Inhalt der Arrays ausgeben, der durch die Methode match(/au/g) und match(/au/gi) mit o.g. Code-Beispielen erzeugt wird.

Hilfe zur Messung von String-Längen: https://webentwicklerkurs.de/2-jahr/javascript/7-unterrichtsblock/#strings
Hilfe zur Ausgabe von Arrays: https://webentwicklerkurs.de/2-jahr/javascript/4-unterrichtsblock/#arrays

Richtiges Ergebnis: 3 au,au,au
Richtiges Ergebnis: 6 au,AU,AU,AU,au,au

Merke: Wenn ein regulärer Ausdruck den Modifikator g nicht enthält (globale Suche), match()wird nur die erste Übereinstimmung in der Zeichenfolge zurückgegeben.

JavaScript-String matchAll()

Die matchAll()Methode gibt einen Iterator zurück, der die Ergebnisse des Abgleichs einer Zeichenfolge mit einer Zeichenfolge (oder einem regulären Ausdruck) enthält.

let text9 = "Wenn Fliegen hinter Fliegen fliegen, fliegen Fliegen Fliegen hinterher."
const iterator = text9.matchAll("Fliegen");

document.getElementById("demo3").innerHTML = Array.from(iterator);

/* Wenn der Parameter ein regulärer Ausdruck ist, 
muss das globale Flag (g) gesetzt werden, 
sonst wird ein TypeError geworfen.
*/

let text10 = "Wenn Fliegen hinter Fliegen fliegen, fliegen Fliegen Fliegen hinterher."
const iterator = text10.matchAll(/Fliegen/g);

document.getElementById("demo4").innerHTML = Array.from(iterator);


/* Wenn zusätzlich auf Groß- & Kleinschreibung verzichtet werden soll,
ist die Insensitiv-Flag (i) zu setzen
*/

let text11 = "Wenn Fliegen hinter Fliegen fliegen, fliegen Fliegen Fliegen hinterher."
const iterator = text11.matchAll(/Fliegen/gi);

document.getElementById("demo5").innerHTML = Array.from(iterator);

Aufgabe

Probiere o.g. Methode aus.

Hinweis: matchAll()funktioniert nicht im Internet Explorer.

JavaScript-String includes()

Die includes()Methode gibt true zurück, wenn eine Zeichenfolge einen angegebenen Wert enthält. Anderenfalls wird false ausgegeben.

// Hier wird geprüft, ob der Text "Brautkleid" enthält:

let text12 = "Brautkleid bleibt Brautkleid und Blaukraut bleibt Blaukraut";
text12.includes("Brautkleid");


// Hier wird geprüft, ob der Text "Brautkleid" ab Position 40 enthält

let text13 = "Brautkleid bleibt Brautkleid und Blaukraut bleibt Blaukraut";
text13.includes("Brautkleid", 40);

Aufgabe

Schreibe ein Skript, welches o.g. Code auf Knopfdruck prüft und verknüpfe eine if-Anweisung.

  • Wenn die Anweisung true zurückgibt, soll die Ausgabe erscheinen „Brautkleitd ist enthalten“
  • Wenn die Anweisung false zurückgibt, soll die Ausgabe erscheinen „Brautkleid ist nicht enthalten“

Anmerkungen

  • includes()unterscheidet zwischen Groß- und Kleinschreibung.
  • includes()ist eine ES6-Funktion (JavaScript 2015).
  • includes()wird im Internet Explorer nicht unterstützt.

JavaScript-String startsWith()

Die startsWith()Methode gibt zurück, true wenn eine Zeichenfolge mit einem angegebenen Wert beginnt. Andernfalls wird false zurückgegeben.

Beispiele

Gibt wahr zurück:

// Gibt true zurück:

let text14 = "Brautkleid bleibt Brautkleid und Blaukraut bleibt Blaukraut";
text14.startsWith("Brautkleid");


// Gibt false zurück:

let text15 = "Brautkleid bleibt Brautkleid und Blaukraut bleibt Blaukraut";
text15.startsWith("Blaukraut");


/*
Es kann auch eine Startposition für die Suche angegeben werden:
*/

// Gibt false zurück:

let text16 = "Brautkleid bleibt Brautkleid und Blaukraut bleibt Blaukraut";
text16.startsWith("bleibt", 10);


// Gibt true zurück:

let text16 = "Brautkleid bleibt Brautkleid und Blaukraut bleibt Blaukraut";
text16.startsWith("bleibt", 11);

Anmerkungen

  • startsWith()unterscheidet zwischen Groß- und Kleinschreibung.
  • startsWith()ist eine ES6-Funktion (JavaScript 2015).
  • startsWith()wird im Internet Explorer nicht unterstützt.

JavaScript-String endsWith()

Die endsWith()Methode gibt zurück, true wenn eine Zeichenfolge mit einem angegebenen Wert endet. Andernfalls gibt die Methode false zurück.

// Prüfung, ob der Name mit "Müller" endet

let text17 = "Thomas Müller";
text17.endsWith("Müller");


// Überprüfen Sie, ob die ersten 16 Zeichen einer Zeichenfolge mit "bleibt" enden:

let text18 = "Brautkleid bleibt Brautkleid und Blaukraut bleibt Blaukraut";
text18.endsWith("bleibt", 16);

Anmerkungen

  • endsWith()unterscheidet zwischen Groß- und Kleinschreibung.
  • endsWith()ist eine ES6-Funktion (JavaScript 2015).
  • endsWith()wird im Internet Explorer nicht unterstützt.

JavaScript-Vorlagen

Synonyme:

  • Vorlagenliterale
  • Vorlagenzeichenfolgen
  • String-Templates
  • Back-Tics-Syntax

Rückwärtsgeneigte-Hochkomma-Syntax (Backtics)

/* Vorlagenliterale verwenden Rückwärts-Hochkomma (Backtics ``) 
anstelle von Anführungszeichen (""), um eine Zeichenfolge zu definieren:
*/

let text = `Servus!`;


/* Innerhalb von Vorlagenliteralen können auch einfache 
und doppelte Anführungszeichen verwendet werden.
*/

let text = `Komm'st mit ins "CityDome"?`;


// Auch mehrzeilige Zeichenfolgen sind möglich.

let text =
`Fischers
Fritz
fischt
frische
Fische`;

Interpolation

Vorlagenliterale bieten eine einfache Möglichkeit, Variablen und Ausdrücke in Zeichenfolgen zu interpolieren. Das Verfahren heißt „String-Interpolation“.

Erklärung: Interpolation kommt aus der Mathematik und meint das Errechnen von Werte zwischen bereits bekannten Werten einer Funktion. In der Bildbearbeitung beschreibt die Interpolation das Errechnen fehlender Bildpunkte aus vorhandenen Nachbar-Pixeln, die anschließend eingeschoben werden, um das Bild zu vergrößern.

// SYNTAX

${...}


/* Vorlagenliterale erlauben Variablen in Strings.
Das automatische Ersetzen von Variablen durch reelle 
Werte wird dabei als String-Interpolation bezeichnet.
*/

let vorName = "Thomas";
let nachName = "Müller";

let text = `Hallo ${firstName} ${lastName}!`;


/* Vorlagenliterale erlauben Ausdrücke in Strings.
Das automatische Ersetzen von Ausdrücken durch reelle 
Werte wird dabei ebenfalls als String-Interpolation bezeichnet.
*/

let Preis = 10;
let MwSt = 1.19;

let Summe = `Total: ${(Preis * MwSt).toFixed(2)}`;

document.getElementById("demo").innerHTML = Summe;

Aufgabe

Probiere o.g. Skripte aus, um ein Gefühl für die Syntax zu bekommen.

HTML-Vorlagen

Vorlagen werden in der Praxis oft zur Generierung von HTML verwendet.

// Vorlage am Beispiel einer Schleife

let ueberschrift = "Südfrüchte";
let frucht = ["Orangen", "Kiwis", "Melonen", "Bananen", "Zitronen"];

let html = `<h2>${ueberschrift}</h2><ul>`;
for (const x of frucht) {
  html += `<li>${x}</li>`;
}

html += `</ul>`;

Aufgabe

Lasse Dir den Wert von „html“ aus o.g. Skript ausgeben

Übungsaufgaben

Lösung

8-unterricht.html