Signatur
Beschreibung
search() prüft, ob ein String auf einen regulären Ausdruck passt und an welcher Stelle der erste Treffer beginnt. Die Methode ist das Regex-Gegenstück zu indexOf(): Sie liefert eine Position (nullbasiert) oder -1, aber keine Trefferdetails wie Gruppen oder den gefundenen Text.
Wird kein RegExp-Objekt übergeben, wandelt JavaScript das Argument implizit mit new RegExp(regexp) um. Ein String wie "." wird also als Regex-Metazeichen gedeutet und passt auf jedes Zeichen. Intern ruft search() die Methode RegExp.prototype[Symbol.search] auf.
Nutze search(), wenn du nur die Position des ersten Treffers brauchst. Für eine reine Ja/Nein-Prüfung ist RegExp.prototype.test() klarer. Für den Trefferinhalt oder Gruppen verwendest du match(), matchAll() oder RegExp.prototype.exec().
Das Flag g hat keine Wirkung: search() sucht immer ab dem Anfang des Strings. Der Wert von lastIndex wird ignoriert und nach dem Aufruf wieder auf seinen ursprünglichen Wert gesetzt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $regexp Pflicht | RegExp|string|any | Der reguläre Ausdruck, nach dem gesucht wird. Alles, was kein RegExp ist und keine Methode [Symbol.search] hat, wird mit new RegExp(regexp) umgewandelt. Ohne Argument (undefined) entsteht ein leerer Regex, der auf Index 0 passt. |
Beispiele
Position der ersten Ziffer finden
const bestellnummer = "Auftrag ABC-4711";
const pos = bestellnummer.search(/\d/);
console.log(pos);
console.log(bestellnummer.slice(pos));
Groß-/Kleinschreibung ignorieren und fehlenden Treffer behandeln
const text = "Willkommen bei programmierung.net";
console.log(text.search(/PROGRAMMIERUNG/i));
console.log(text.search(/python/i));
const hatPython = text.search(/python/i) !== -1;
console.log(hatPython);
Fallstrick: String-Argument wird zum Regex
const version = "v2.0.1";
// "." ist ein Regex-Metazeichen und passt auf jedes Zeichen
console.log(version.search("."));
// Zum wörtlichen Suchen maskieren oder indexOf verwenden
console.log(version.search(/\./));
console.log(version.indexOf("."));
Eingabe prüfen: Position eines ungültigen Zeichens melden
const pruefeBenutzername = (name) => {
const pos = name.search(/[^a-z0-9_]/i);
return pos === -1
? "Gültig"
: `Ungültiges Zeichen "${name[pos]}" an Position ${pos}`;
};
console.log(pruefeBenutzername("max_mustermann"));
console.log(pruefeBenutzername("max muster"));
// Wichtig · Fallstricke
- Strings werden als Regex gedeutet:
"a+b".search("+")wirft einenSyntaxError(ungültiger regulärer Ausdruck). Für die wörtliche Suche nach Text istindexOf()die richtige Wahl. Stammt der Suchtext von Benutzern, musst du ihn vorher maskieren (oderRegExp.escape()nutzen, wo es verfügbar ist). - Flag
gundlastIndexwerden ignoriert: Die Suche beginnt immer bei Index 0. Einen Start-Offset wie beiindexOf(str, from)gibt es nicht. Stattdessen hilftstr.slice(from).search(re)plusfromoder ein Regex mit Flagy/gzusammen mitexec(). - Das Ergebnis vergleichen, nicht als Wahrheitswert nutzen: Ein Treffer an Index 0 ist falsy.
if (str.search(re))ist daher ein Fehler. Richtig ist!== -1. - Der Index zählt in UTF-16-Codeeinheiten. Emojis und andere Zeichen außerhalb der BMP zählen als zwei Einheiten.
search()läuft nur bis zum ersten Treffer. Bei komplexen Mustern und langen Eingaben kann trotzdem katastrophales Backtracking auftreten (ReDoS). Das ist bei Mustern relevant, die aus Benutzereingaben stammen.