Signatur
Beschreibung
unicodeSets ist eine schreibgeschützte Accessor-Eigenschaft von RegExp-Instanzen. Sie liefert true, wenn der reguläre Ausdruck mit dem Flag v erstellt wurde, etwa über das Literal /…/v oder mit new RegExp(muster, "v"). Andernfalls liefert sie false. Der Wert steht fest, sobald das Objekt erzeugt ist, und lässt sich danach nicht mehr ändern.
Das Flag v ist eine erweiterte Form des Flags u und schaltet den Unicode-Sets-Modus ein. Er bietet unter anderem:
- Mengenoperationen in Zeichenklassen: Differenz mit
--(z. B.[\p{L}--[a-z]]) und Schnittmenge mit&&(z. B.[\p{Script=Greek}&&\p{L}]) - Verschachtelte Zeichenklassen wie
[[a-z][0-9]] - String-Eigenschaften wie
\p{RGI_Emoji}, die auch Emojis aus mehreren Codepunkten als Ganzes finden - String-Literale in Klassen mit
\q{…}, z. B.[\q{abc|xy}a-z]
Die Eigenschaft ist nützlich, wenn Code fremde reguläre Ausdrücke prüft, kopiert oder umbaut. Bibliotheken können damit erkennen, ob ein Muster die strengeren Syntaxregeln des v-Modus erfüllen muss. Diese Regeln betreffen zum Beispiel das Escapen von Sonderzeichen in Zeichenklassen. Für ein neues Muster mit denselben Flags reicht meist new RegExp(re.source, re.flags). Wer gezielt nachfragen will, nutzt re.unicodeSets.
Rückgabewert
true, wenn das Flag v gesetzt ist, sonst false. Direkt auf RegExp.prototype abgefragt liefert die Eigenschaft undefined.Beispiele
Flag abfragen und mit u vergleichen
const mitV = /[\p{L}--[a-z]]/v;
const mitU = /\p{L}/u;
const ohne = /abc/;
console.log(mitV.unicodeSets); // true
console.log(mitU.unicodeSets); // false
console.log(ohne.unicodeSets); // false
console.log(mitV.flags); // "v"
console.log(mitV.unicode); // false – v setzt nicht zusätzlich u
Mengendifferenz und Emoji-Sequenzen im v-Modus
// Alle Buchstaben außer ASCII-Kleinbuchstaben
const nichtAsciiKlein = /[\p{L}--[a-z]]/gv;
console.log("Größe".match(nichtAsciiKlein));
// Emojis aus mehreren Codepunkten als Ganzes finden
const emoji = /\p{RGI_Emoji}/gv;
console.log("👨👩👧 Familie 🇩🇪".match(emoji));
console.log(emoji.unicodeSets);
Unterstützung prüfen mit Rückfall auf u
const unterstuetztV = (() => {
try {
return new RegExp("", "v").unicodeSets === true;
} catch {
return false; // Ältere Engines werfen SyntaxError
}
})();
const buchstaben = unterstuetztV
? new RegExp("[\\p{L}&&\\p{Script=Latin}]+", "gv")
: new RegExp("\\p{Script=Latin}+", "gu");
console.log(unterstuetztV);
console.log("Hallo Κόσμε Welt".match(buchstaben));
Regex beim Kopieren mit Flags erweitern
const mitGlobal = (re) => {
const flags = re.flags.includes("g") ? re.flags : re.flags + "g";
return new RegExp(re.source, flags);
};
const original = /[\p{Lu}--[A-Z]]/v;
const kopie = mitGlobal(original);
console.log(kopie.unicodeSets, kopie.global);
console.log("ÄBCÖDÜ".match(kopie));
// u und v zusammen sind verboten
try {
new RegExp("a", "uv");
} catch (e) {
console.log(e.name);
}