Input-Bereichs-Assertion: ^, $
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Eine Input-Bereichs-Assertion überprüft, ob die aktuelle Position im String ein Input-Bereich ist. Ein Input-Bereich ist der Beginn oder das Ende des Strings; oder, wenn das m
-Flag gesetzt ist, der Beginn oder das Ende einer Zeile.
Syntax
^
$
Beschreibung
^
bestätigt, dass die aktuelle Position der Beginn des Inputs ist. $
bestätigt, dass die aktuelle Position das Ende des Inputs ist. Beide sind Assertionen, daher verbrauchen sie keine Zeichen.
Genauer gesagt, ^
bestätigt, dass das Zeichen links außerhalb des Stringbereichs liegt; $
bestätigt, dass das Zeichen rechts außerhalb des Stringbereichs liegt. Wenn das m
Flag gesetzt ist, passt ^
auch, wenn das Zeichen links ein Zeilenbeendigung Zeichen ist, und $
passt auch, wenn das Zeichen rechts ein Zeilenbeendigung Zeichen ist.
Solange das m
-Flag nicht gesetzt ist, machen die ^
und $
Assertionen nur Sinn, wenn sie an den Rändern des Musters platziert werden, da alle anderen Zeichen links oder rechts von ihnen zwangsläufig dazu führen würden, dass die Assertion fehlschlägt.
Das y
-Flag ändert die Bedeutung dieser Assertionen nicht — siehe auch anchored sticky flag.
Beispiele
Entfernen von abschließenden Schrägstrichen
Das folgende Beispiel entfernt abschließende Schrägstriche aus einer URL-Zeichenfolge:
function removeTrailingSlash(url) {
return url.replace(/\/$/, "");
}
removeTrailingSlash("https://example.com/"); // "https://example.com"
removeTrailingSlash("https://example.com/docs/"); // "https://example.com/docs"
Dateierweiterungen abgleichen
Das folgende Beispiel überprüft Dateitypen, indem es die Dateierweiterung abgleicht, die immer am Ende der Zeichenfolge steht:
function isImage(filename) {
return /\.(?:png|jpe?g|webp|avif|gif)$/i.test(filename);
}
isImage("image.png"); // true
isImage("image.jpg"); // true
isImage("image.pdf"); // false
Gesamten Input abgleichen
Manchmal möchten Sie sicherstellen, dass Ihr Regex den gesamten Input abgleicht, nicht nur eine Teilzeichenfolge des Inputs. Wenn Sie beispielsweise feststellen möchten, ob ein String ein gültiges Bezeichner ist, können Sie Input-Bereichs-Assertionen an beiden Enden des Musters hinzufügen:
function isValidIdentifier(str) {
return /^[$_\p{ID_Start}][$_\p{ID_Continue}]*$/u.test(str);
}
isValidIdentifier("foo"); // true
isValidIdentifier("$1"); // true
isValidIdentifier("1foo"); // false
isValidIdentifier(" foo "); // false
Diese Funktion ist nützlich, wenn Sie Codegen (Code mit Code generieren) durchführen, weil Sie gültige Bezeichner anders verwenden können als andere String-Eigenschaften, wie z.B. Punktnotation anstelle von Klammernotation:
const variables = ["foo", "foo:bar", " foo "];
function toAssignment(key) {
if (isValidIdentifier(key)) {
return `globalThis.${key} = undefined;`;
}
// JSON.stringify() escapes quotes and other special characters
return `globalThis[${JSON.stringify(key)}] = undefined;`;
}
const statements = variables.map(toAssignment).join("\n");
console.log(statements);
// globalThis.foo = undefined;
// globalThis["foo:bar"] = undefined;
// globalThis[" foo "] = undefined;
Spezifikationen
Specification |
---|
ECMAScript Language Specification # prod-Assertion |
Browser-Kompatibilität
BCD tables only load in the browser