Tonda: regex problem

Hallo, ich bin gerade dabei für ein Spiel einen Nachrichtenformatierer zu schreiben, ich habe es auch fast geschafft, so sieht derzeit mein code aus:

<html><head><title>Telegrammformatierer</title>  
[code lang=javascript]<script type="text/javascript">  
function Titel()  
{  
  var feld = document.getElementById('eingabe').value, oben = /Betreff\s+(.*)\s+Gesprächspartner\s+(\w+)/, titel = oben.exec(feld);  
  var zwischen = "[b]Betreff:[/b] " + titel[1] + "\n" + "[b]Gesprächspartner:[/b] [player]" + titel[2] + "[/player]";  
  var unten = /.*\n(.*\s+(?:am\s\d\d\.\d\d\.\d\d|heute)\sum\s\d\d:\d\d\sUhr(?:.|\s)+)\s(?:.|\s)+\n/gi, nachricht = unten.exec(feld);  
  var fertig = zwischen + nachricht[1];  
  document.getElementById('ausgabe').value = fertig;  
  document.getElementById('test').value = nachricht;  
}  
  
function leer()  
{  
  if (document.getElementById('name').value == "Trage hier deinen Ingame Nicknamen ein.") {  
    document.getElementById('name').value = ""  
  }  
}  
  
function füll()  
{  
  if (document.getElementById('name').value == "") {  
    document.getElementById('name').value = "Trage hier deinen Ingame Nicknamen ein."  
  }  
}  
  
</script>

</head><body>
<form action="">
<textarea name="name" id="name" cols="50" onclick="leer()" onblur="füll()" rows="1">Trage hier deinen Ingame Nicknamen ein.</textarea><br>
<textarea name="eingabe" id="eingabe" cols="50" rows="10"></textarea><br>
<input type="button" value="Ausgabe" onclick="Titel()"><br>
<textarea name="ausgabe" id="ausgabe" cols="50" rows="10"></textarea><br>
<textarea name="test" id="test" cols="50" rows="10"></textarea><br>
</form>
</body></html>[/code]

und das klappt bisher auch ganz gut, d.h. er liest den gesprächspartner  und den Betreff aus. Auch erkennt er an einem datum und einer Uhrzeit wann eine neue antwort beginnt (.*\s+(?:am\s\d\d\.\d\d\.\d\d|heute)\sum\s\d\d:\d\d\sUhr(?:.|\s)+)
Mein Problem ist jetzt, dass er bisher noch alles was nach dem namen, dem datum und der uhrzeit kommt im array unter einem namen speichert. Wenn ich es jetzt begrenzen will (also nur bis dahin wo dann die nächste antwort beginnt), und zwar indem ich danach einfach nochmal angebe, dass ein wort (der name) und ein datum und eine Uhrzeit kommen soll.
Jetzt kommt mein Problem, wenn ich dann auf den button zum berechnen klicke, tut es nicht nur nicht, sondern es hängt sich der ganze browser auf, und reagiert nichtmehr. Eigentlich ist der ganze code richtig.

Das ist der Text, den er durchsuchen soll:

Betreff   Das ist der Betreff
Gesprächspartner  YYYYY
»1« [2] [3]
Tonda  am 15.01.09 um 15:24 Uhr
das ist die zweite antwort
YYYYY  am 15.01.09 um 15:16 Uhr
das ist die erste antwort

auch wenn ich jetzt nach dem match zum begrenzen des zu speichernden arrays einfach angebe, bis das nächste mal "YYYYY" kommt, hängt er sich auf.

Ich hoffe ihr versteht mein Problem und könnt mir helfen

MfG Tonda

  1. gudn tach!

    und das klappt bisher auch ganz gut,

    aber vorsicht, es laeuft nur, wenn zufaellig browser-default-character-encoding mit dem der datei uebereinstimmt, der drecksumlaute wegen.
    iow: gib das korrekte encoding im head an.

    Mein Problem ist jetzt, dass er bisher noch alles was nach dem namen, dem datum und der uhrzeit kommt im array unter einem namen speichert. Wenn ich es jetzt begrenzen will (also nur bis dahin wo dann die nächste antwort beginnt), und zwar indem ich danach einfach nochmal angebe, dass ein wort (der name) und ein datum und eine Uhrzeit kommen soll.

    aeh, was? sorry, die beschreibung ist mir zu wirr. was soll genau passieren?

    prost
    seth

    1. iow: gib das korrekte encoding im head an.

      ähm, encoding?

      aeh, was? sorry, die beschreibung ist mir zu wirr. was soll genau passieren?

      naja, er soll in der nachricht:

      Betreff   Das ist der Betreff
      Gesprächspartner  YYYYY
      »1« [2] [3]
      Tonda  am 15.01.09 um 15:24 Uhr
      das ist die zweite antwortx
      YYYYY  am 15.01.09 um 15:16 Uhr
      das ist die erste antworty

      den betreff und den gesprächspartner raussuchen (das klappt schon)
      dann soll er alles von tonda (also im match, dem wort, das vor dem datum steht) bis antwortx (also dem wort, das vor dem wort vor dem datum kommt) im array unter einem namen speichern, dann alles von YYYYY bist antworty unternem andren namen. Bisher hab ichs soweit, dass er mir alles ab Tonda in einen namen im array speichert (weil ich ja angegeben hab: Wort-Datum-Uhrzeit-alles. Um diesesalles am schluss nun zu begrenzen, will ich eigentlich angeben, dass er alles bis zu dem Wort vor YYYYY unter einem namen speichern soll. Aber genau da hängt sich der Browser immer auf, wenn ich das alles (also .*) begrenzen will.
      Hoffe du hast es verstanden

      MfG Tonda

      1. gudn tach!

        iow: gib das korrekte encoding im head an.
        ähm, encoding?

        na utf8-, latin-I und so, siehe http://de.selfhtml.org/html/kopfdaten/meta.htm#zeichenkodierung.

        naja, er soll in der nachricht:

        Betreff   Das ist der Betreff
        Gesprächspartner  YYYYY
        »1« [2] [3]
        Tonda  am 15.01.09 um 15:24 Uhr
        das ist die zweite antwortx
        YYYYY  am 15.01.09 um 15:16 Uhr
        das ist die erste antworty

        den betreff und den gesprächspartner raussuchen (das klappt schon)
        dann soll er alles von tonda (also im match, dem wort, das vor dem datum steht) bis antwortx (also dem wort, das vor dem wort vor dem datum kommt) im array unter einem namen speichern, dann alles von YYYYY bist antworty unternem andren namen.

        ah, ok. da ist aber schon ein grundsaetzliches problem vorhanden, wenn jemand in einer nachricht sowas schreibt wie "foo am 01.01.01 um 00:00". denn wie erkennst du dann, ob es zur nachricht gehoert oder eine meta-information ist?

        angenommen, du wuerdest das noch in den griff bekommen, schlage ich die nutzung von "split" vor:

          
         var nachrichten_re = /(.*\s+(?:am\s\d\d\.\d\d\.\d\d|heute)\sum\s\d\d:\d\d\sUhr\n)/i;  
         var nachrichten = feld.split(nachrichten_re);
        

        "nachrichten" waere dann ein array mit allen nachrichten und deren urhebern.

        prost
        seth

  2. Hallo Tonda,

    function füll()

    ^
    und das funktioniert?

    Gruß, Jürgen