[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt RegExp – Probleme mit match()/exec()

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

RegExp – Probleme mit match()/exec()

Ferestes
Beiträge gesamt: 21

9. Nov 2017, 20:04
Beitrag # 1 von 5
Bewertung:
(2992 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Forum,

ich habe ein Problem mit match()/exec(). Hintergrund ist, dass ein wirklich sehr komplexer regulärer Ausdruck zusammengesetzt wird und dann ein String damit gematcht werden soll. Allerdings hängt sich InDesign (CS6, CC 2015) dabei auf.
Code
//eventuelle Namenspräfixe 
var _npfx = "(?:[vV]on ?|[vV]on ?der ?|[vV]an ?|[vV]an ?den ?|[vV]an ?der ?)";
//Groß- und Kleinbuchstaben
var _upperCase ="["0041", "0042"]"; // und so weiter
var _lowerCase ="["0061", "0062"]"; // und so weiter
//Namen
var _surnames = "_upperCase + _lowerCase + "+"";
//regulärer Ausdruck wird kompiliert
var _refName2Grep2 = RegExp ("[au]nd +((?:" +_npfx + ")?" + _surnames + ") ,\\d{4}");
//und auf _someSting angewendet.
var _refName2 = _someString.contents.exec(_refName2Grep2);


Der Code ist vereinfacht, aber vielleicht wird das Problem klar. Ist das bekannt? Wie könnte man sonst sehr komplexe reguläre Ausdrücke auf String anwenden?

Vielen Dank!
X

RegExp – Probleme mit match()/exec()

pixxxelschubser
Beiträge gesamt: 1708

10. Nov 2017, 00:02
Beitrag # 2 von 5
Beitrag ID: #560611
Bewertung:
(2962 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hmmh?

Was genau möchtest du finden?
Was soll mit den Fundstellen passieren?
Warum zerpflückst du den Suchstring in so viele Einzelteile?

Kannst du dein Vorhaben noch etwas genauer beschreiben und ein paar (möglichst mehr als zwei) aussagekräftige Beispiele zeigen? Oder eine IDML auf einen Hoster deiner Wahl hochladen und hier verlinken?

Warum verwendest kaum Platzhalter?
Du bist dir bewusst, dass dein Grep einige falsch positive Treffer landet?

Sieh dir bitte mal den Anhang an.
Möchtest du das finden? Ist im Grunde genommen fast dein Grep, lediglich etwas zusammengesetzt und einmal ohne (magenta) und einmal mit Wortgrenzenbeschränkung (blau, das verhindert schon ein paar falsch positive Treffer)

Der Screenshot zeigt zumindest das, was ich denke, aus deinem Eingangspost herausgelesen zu haben. Ich könnte aber auch total danebenliegen - sind halt zu wenige Informationen.


als Antwort auf: [#560608]
Anhang:
Prefix_mit_Namen.png (80.9 KB)

RegExp – Probleme mit match()/exec()

Ferestes
Beiträge gesamt: 21

10. Nov 2017, 09:50
Beitrag # 3 von 5
Beitrag ID: #560622
Bewertung:
(2926 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo pixxxelschubser,

danke erst einmal für die Antwort. Der reguläre Ausdruck ist so zerpflückt, weil ich zwischenzeitlich dachte, dass match() Probleme mit zu verschachtelten Ausdrücken bekommt.

Der ursprüngliche Ausdruck sieht so aus:

Code
 "(?:(?:[vV]on(?:" + _space + "der)?|[vV]an(?:" + _space + "de[nr])?|[vV]an" + _apos + "t|ter|[dD]i|[dD]e(?:" + _space + "la)?)" + _space + "+|[dD](?:" + _apos + "|e)|Ma?c|O" + _apos + "|El" + _space + ")"; //Namenspräfixe 


wobei _space wiederum verschiedene Leerräume abdeckt und _apos verschiedene Apostrophen findet.

Du hast ja mit Grep gesucht, bei match()/exec() stehen ja leider keine POSIX-Ausdrücke zur Verfügung, ebenso funktionieren \u und \l für uppercase und lowercase nicht, daher die Unicodepoints (allerdings macht das den Grep-Ausdruck leider absolut unlesbar).

Die Wortgrenzen sind in dem Fall nicht nötig. In einem ersten Schritt suche ich mit Grep im FLießtext nach Referenzen auf Literatur und speichere die Treffer in einem Array. Anschließend werte ich jeden Treffer aus, um zu prüfen, ob nur ein Autor (Autor, Jahreszahl), zwei Autoren (Autor and Autor, Jahreszahl) oder mehrere Autoren (Autor et al., Jahreszahl) gefunden wurden. Da ich hier jeweils einen String auswerten muss, muss ich mit match() oder exec() arbeiten.


als Antwort auf: [#560611]
(Dieser Beitrag wurde von Ferestes am 10. Nov 2017, 09:51 geändert)

RegExp – Probleme mit match()/exec()

pixxxelschubser
Beiträge gesamt: 1708

10. Nov 2017, 18:21
Beitrag # 4 von 5
Beitrag ID: #560641
Bewertung:
(2890 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Jetzt hast du mich verwirrt!
Oder hast du die Grep bzw. Regex im Screenshot eventuell übersehen?
Und leider geht dein Antwort ein bisschen an meinen Nachfragen „vorbei“.

Ich verwende weder \u noch \l und auch keine POSIX-Ausdrücke.

Ansonsten habe ich lediglich die Buchstaben in einer Klasse gesammelt und nicht wie du die „langatmigen Unicodepoints für jeden einzelnen Buchstaben“. Und die einzelnen Teil-Suchen zusammengefügt. Die zusätzlichen Wortgrenzen sind nicht zwingend nötig, helfen aber einige falsch positive Treffer zu verhindern.

Deshalb sollten beide Regex auch in Verbindung mit exec() funktionieren. Höchstens der Ausdruck für „Gross- und Kleinschreibung ignorieren“ könnte u.U. im Skript nicht funzen. Das habe ich noch nie ausgetestet. Aber dafür gibt es ja für Regex in Javascript den Parameter match(/regex/i)

Oder vielleicht hapert es an dem bereits bei dir enthaltenen Ausdruck „nicht im Suchstring speichern“ (habe ich ebenfalls noch nie in einem Skript verwendet).

Aber vielleicht gehst du ja noch etwas genauer auf die anderen Fragen in meinem vorherigen Posting ein.


als Antwort auf: [#560622]

RegExp – Probleme mit match()/exec()

Ferestes
Beiträge gesamt: 21

13. Nov 2017, 18:30
Beitrag # 5 von 5
Beitrag ID: #560676
Bewertung:
(2798 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke, du hast Recht. Das Zusammenfassen zu einer Klasse hat das Problem gelöst. Davor war mein Prozessor wohl überfordert. Merci!


als Antwort auf: [#560641]
X