52 lines
1.7 KiB
Markdown
52 lines
1.7 KiB
Markdown
# Regex Beispiel
|
|
|
|
Am besten löst man das mit einem regulären Ausdruck, der entweder nach **Inhalten in Anführungszeichen** sucht _oder_ nach **Inhalten ohne Kommas**.
|
|
|
|
Hier ist der passende Reguläre Ausdruck:
|
|
|
|
`/"([^"\\]*(?:\\.[^"\\]*)*)"|([^,]+)/g`
|
|
|
|
---
|
|
|
|
### Wie der Regex funktioniert
|
|
|
|
Der Ausdruck nutzt das **ODER-Prinzip (`|`)**, um zwei Szenarien zu matchen:
|
|
|
|
1. **`"([^"\\]*(?:\\.[^"\\]*)*)"` (Gruppe 1):** Matcht alles, was in doppelten Anführungszeichen steht. Er erlaubt sogar escaped Anführungszeichen (`\"`) im Text.
|
|
2. **`([^,]+)` (Gruppe 2):** Wenn keine Anführungszeichen da sind, matcht er alles bis zum nächsten Komma.
|
|
|
|
---
|
|
|
|
### Anwendung in JavaScript (Beispiel)
|
|
|
|
Da du das Ergebnis sicherlich in einem Array von einzelnen Werten brauchst, kannst du den Regex wie folgt anwenden. Hierbei nutzen wir `matchAll`, um die Treffer sauber zu trennen und die Anführungszeichen direkt zu entfernen:
|
|
|
|
```javascript
|
|
const input = '"very big, soft computer mouse","the cutest peripheral ever",10,39.90';
|
|
const regex = /"([^"\\]*(?:\\.[^"\\]*)*)"|([^,]+)/g;
|
|
|
|
const matches = [...input.matchAll(regex)];
|
|
|
|
const result = matches.map((match) => {
|
|
// Wenn Gruppe 1 existiert, war es ein String in Anführungszeichen
|
|
// Wenn Gruppe 2 existiert, war es ein unberührter Wert (Zahl)
|
|
const value = match[1] !== undefined ? match[1] : match[2].trim();
|
|
|
|
// Optional: Datentypen konvertieren
|
|
if (!isNaN(value) && value !== '') {
|
|
return Number(value);
|
|
}
|
|
return value;
|
|
});
|
|
|
|
console.log(result);
|
|
```
|
|
|
|
### Das Ergebnis (Output)
|
|
|
|
Nach dem Parsen erhältst du ein sauberes Array, bei dem die Kommas innerhalb der Strings ignoriert wurden und die Zahlen einsatzbereit sind:
|
|
|
|
```json
|
|
["very big, soft computer mouse", "the cutest peripheral ever", 10, 39.9]
|
|
```
|