[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste

ESTK: Escapen eines Ersetzen-Zeichens beim replace()-Befehl

Martin Fischer
  
Beiträge gesamt: 12783

16. Jul 2013, 10:35
Bewertung:

gelesen: 2482

Beitrag als Lesezeichen
Liebe Kollegen,

beim Debuggen eines replace()-Befehls bin ich auf ein Problem gestoßen, das ich als solches nicht erkennen kann.

Folgender Code lässt sich als Skript über die Skriptpalette ohne Probleme ausführen:
Code
alert('Hallo!'); 
var str = '<data>ABC</data>';
str = str.replace(/(\<data\>)/g,'$1<![CDATA[');
str = str.replace(/(\<\/data\>)/g,']]>$1');
alert(str);


Versuche ich, diesen Code im ESTK auszuführen, passiert gar nix.
Nicht mal der erste alert()-Befehl wird ausgeführt.
Nur das Warten-Rädchen dreht sich ohne Ende.
Escape ich nun das ">" im zweiten replace()-Befehl, funktioniert es auch im ESTK.

Code
alert('Hallo!'); 
var str = '<data>ABC</data>';
str = str.replace(/(\<data\>)/g,'$1<![CDATA[');
str = str.replace(/(\<\/data\>)/g,']]\>$1');
alert(str);


Das Interessante dabei ist, dass auch ein Auskommentieren der 2. Zeile mit dem unescapten ">" nicht vor dem Problem schützt:

Code
alert('Hallo!'); 
var str = '<data>ABC</data>';
str = str.replace(/(\<data\>)/g,'$1<![CDATA[');
// str = str.replace(/(\<\/data\>)/g,']]>$1');
alert(str);


ESTK scheint bei der Kombination ']]>' in eine Endlosschleife zu geraten.
Ohne die dem '>' voranstehenden ']]' funktioniert's auch.

Da selbst der erste alert()-Befehl nicht ausgeführt wird, nehme ich an, dass die Ursache in der Vorabprüfung der Syntax (etwa fehlende oder zu viele Klammern aufspüren) zu suchen ist.

Lässt sich dieses Verhalten auch unter Windows reproduzieren?

Zum anderen bin ich hinsichtlich der Notwendigkeit des Escapens von reservierten Zeichen beim replace()-Befehl verunsichert. Empfiehlt es sich, im Zweifel oder gar grundsätzlich das Escape-Zeichen auch beim Ersetzen-Ausdruck anzugeben?

(Dieser Beitrag wurde von Martin Fischer am 16. Jul 2013, 10:36 geändert)
Änderungsverlauf:
Beitrag geändert von Martin Fischer (Moderator) am 16. Jul 2013, 10:36