Textextraktion (PEG statt Regex)
Bei Browserautomatisierung treffen Sie häufig auf unordentliche Daten: uneinheitlich formatierte Texte, Tippfehler oder mehrere Informationsarten in einer einzigen Zeichenkette.
JavaScript und Lua verwenden dafür meist reguläre Ausdrücke. Guida enthält zusätzlich die Janet-Engine mit eingebauter Parsing Expression Grammar (PEG). PEGs sind eine lesbare und wartbare Alternative, wenn Textstrukturen komplexer werden.
Das Problem mit Regex
Abschnitt betitelt „Das Problem mit Regex“Regex ist hervorragend für einfache Muster. Bei verschachtelten oder wechselhaften Strukturen wird es schnell schwer lesbar.
Nehmen wir eine Zeichenkette wie "Item: SuperWidget (ID: 98765) - Only $49.99 today!".
JavaScript mit Regex
Abschnitt betitelt „JavaScript mit Regex“const text = "Item: SuperWidget (ID: 98765) - Only $49.99 today!";
const regex = /\\(ID:\\s*(\\d+)\\).*?\\$([0-9.]+)/;const match = text.match(regex);
if (match) { const id = match[1]; const price = match[2]; g.log(`Found ID: ${id}, Price: ${price}`);}Das funktioniert, ist aber spröde. Kleine Formatänderungen können das Muster brechen, und spätere Anpassungen sind oft schwer nachzuvollziehen.
Der Janet-Ansatz mit PEG
Abschnitt betitelt „Der Janet-Ansatz mit PEG“Janets peg-Modul erlaubt zusammensetzbare Parser. Statt einer kryptischen Zeichenkette definieren Sie eine Grammatik aus benannten Regeln.
(def text "Item: SuperWidget (ID: 98765) - Only $49.99 today!")
(def product-grammar (peg/compile ~{:id-rule (sequence "(ID: " (capture (some :d)) ")") :price-rule (sequence "$" (capture (some (choice :d "."))))
:main (any (choice :id-rule :price-rule 1))}))
(def results (peg/match product-grammar text))
(if results (do (def id (get results 0)) (def price (get results 1)) (g.log (string "Found ID: " id ", Price: " price))))Warum PEGs für Webdaten nützlich sind
Abschnitt betitelt „Warum PEGs für Webdaten nützlich sind“- Lesbarkeit: Regeln haben Namen und können aufeinander verweisen.
- Zusammensetzung: Komplexe Parser entstehen aus kleineren, getesteten Regeln.
- Vorhersagbarkeit: PEGs passen genau auf die angegebenen Regeln und vermeiden viele unklare Backtracking-Fälle.
- Datenstrukturen: Janets
peg-Modul kann Arrays und Dictionaries direkt aus dem Parse-Schritt erzeugen.
Wann welches Werkzeug?
Abschnitt betitelt „Wann welches Werkzeug?“- JavaScript oder Lua mit Regex eignet sich für einfache Validierungen, etwa ob ein Text wie eine E-Mail-Adresse aussieht.
- Janet mit PEG eignet sich, wenn mehrere zusammenhängende Werte aus wechselhaften Textblöcken extrahiert werden müssen.