RegExp optimieren
Florian
- javascript
Hallo,
ich habe hier einen Regulären Ausdruck, der - ausnahmsweise mal - gut funktioniert, aber recht lang und/oder umständlich zu sein scheint.
reg = /[\w|\ä|\ö|\ü|\ß|-|.|/|\å|\è|\é|\ê]*\b[\w|\ä|\ö|\ü|\ß|-|.|/|\å|\è|\é|\ê]+\b[\w|\ä|\ö|\ü|\ß|-|.|/|\å|\è|\é|\ê]*/gi;
Der RegExp sucht in einem Textfeld (String) nach einem oder mehreren Begriffen, die den folgenden Suchmustern entsprechen:
---------------------------------------------------------------------------------------------------------------------------
Baum, Motor, Rad etc. // normale Begriffe
Äpfel, Zäune, Menü, Maß etc. // Umlauten am Anfang des Begriffs, im Begriff und am Ende des Begriffs
Århus, Pière, Sempé etc. // Sonderzeichen am Anfang des Begriffs, im Begriff und am Ende des Begriffs
1912, 20000 etc. // Zahlen und Ziffern
Datensatz1, Daten1satz3, 20und3 etc. // Unmittelbare Abfolge von Buchstaben und Ziffern
Dateiname.pdf, Haus_17.rtf, Zahn-Krone.rtf etc. // Dateinamen in den üblichen Schreibweise, Begriffe, die bestimmte Satzzeichen enthalten
---------------------------------------------------------------------------------------------------------------------------
Es soll jeweils immer der ganze Begriff mit dem Suchmuster übereinstimmten; Beispiel
ausschließlich "Baum" wird gefunden, nicht "Baumsterben" oder "Obstbaum" etc.
---------------------------------------------------------------------------------------------------------------------------
Wie gesagt: der RegExp, den ich gebastelt habe, erfüllt seine Aufgabe, ist aber weder übersichtlich noch leicht zu pflegen, erst recht nicht, wenn weitere Satz- und Sonderzeichen hinzukommen sollten.
Findet jemand eine elegantere Form für die genannten Anforderung ?
Für Hinweise dankbar - es grüßt Florian
Hi,
ich habe hier einen Regulären Ausdruck, der - ausnahmsweise mal - gut funktioniert, aber recht lang und/oder umständlich zu sein scheint.
reg = /[\w|\ä|\ö|\ü|\ß|-|.|/|\å|\è|\é|\ê]*\b[\w|\ä|\ö|\ü|\ß|-|.|/|\å|\è|\é|\ê]+\b[\w|\ä|\ö|\ü|\ß|-|.|/|\å|\è|\é|\ê]*/gi;
ja, richtig. Du brauchst das Zeichen "|" in den Zeicheklassen beispielsweise nur ein mal anzugeben.
Wie gesagt: der RegExp, den ich gebastelt habe, erfüllt seine Aufgabe, ist aber weder übersichtlich noch leicht zu pflegen, erst recht nicht, wenn weitere Satz- und Sonderzeichen hinzukommen sollten.
Du kannst mittels der RegExp()-Klasse ohne weiteres eine Regular Expression aus Strings zusammen bauen.
Cheatah
... Du brauchst das Zeichen "|" in den Zeicheklassen beispielsweise nur ein mal anzugeben.
Du kannst mittels der RegExp()-Klasse ohne weiteres eine Regular Expression aus Strings zusammen bauen.
Hallo Chetah,
beide Hinweise habe ich leider nicht bzw. nicht ganz verstanden!
In meinen Nachschlagewerken sehe ich immer nur die Schreibweise
Zeichen1|Zeichen1|Zeichen1 bei einer ODER Verknüpfung; hast Du ein vereinfachte Beispiel für die Kurzform ?
Den zweiten Tip habe ich nicht verstanden; hast du hierzu ein einfaches Beispiel ?
Mfg Florian
Hi,
In meinen Nachschlagewerken sehe ich immer nur die Schreibweise
Zeichen1|Zeichen1|Zeichen1 bei einer ODER Verknüpfung;
ich wette mit Dir, dass Du diese Schreibweise aber nicht in Zeichenklassen siehst - und wenn doch, füge das Buch seiner rechtmäßigen Bestimmung zu. Du hast doch einen Kamin, oder?
In einer Zeichenklasse stehen diejenigen Zeichen, die zu der Klasse gehören. Steht dort ein "|" drin, ist es ein Zeichen der Klasse.
Den zweiten Tip habe ich nicht verstanden; hast du hierzu ein einfaches Beispiel ?
Aber nur, weil bei SelfHTML der komplette Punkt des Erzeugens von RegExp-Objekten schmählich ausgelassen wurde:
var temp = new RegExp('fo{'+(10/5)+'}');
alert(temp.test('foo'));
Cheatah
Hallo,
Aber nur, weil bei SelfHTML der komplette Punkt des Erzeugens von RegExp-Objekten schmählich ausgelassen wurde:
»/.../« erzeugt auch ein RegExp-Objekt. Beschrieben wird nur der sog. Regular Expression Literal, nicht die ausführliche Schreibweise zum Erzeugen eines RegExp-Objekts, das Aufrufen des RegExp-Konstruktors.
Mathias