3Fox: Problem mit RegExp

Hallo Leute!

Ich beschäftige mich grade mit der Generierung von HTML-Tables.

Im Moment versuche ich einen Ansatz der auf der String.replace()-Funktion von Javascript basiert umzusetzen.

Das ganze sieht folgendermaßen aus:
Ich generiere einen String und ersetze dann in ihm gewisse markierte Bereiche.

Bsp: "<td class="_variable_">"

Die Werte die statt dem Platzhalter eingefügt werden sollen befinden sich in einem Objekt namens values.

Bsp: values["variable"]="wert";

Der Aufruf lautet dann also:

neuString=altString.replace(/(_)([a-zA-Z]+)(_)/g,values["$2"]);

Allerdings bekomme ich dann statt dem "wert" ein "undefined". Alternativ habe ich auch schon diesen Aufruf versucht:

neuString=altString.replace(/(_)([a-zA-Z]+)(_)/g,values[RegExp.$2]);

Auch dieser funktioniert nicht. Der Wert ist allerdings sicher im Objekt enthalten, da der Aufruf:

neuString=altString.replace(/(_)([a-zA-Z]+)(_)/g,values["variable"]);

zum Erfolg führt.

Hat da jemand eine Idee, wie ich mein Problem lösen könnte?

Danke schonma im Vorraus und fG,
3Fox

  1. Hi!

    neuString=altString.replace(/(_)([a-zA-Z]+)(_)/g,values["$2"]);

    Das geht so nicht. replace() ersetzt den gefundenen String durch den zweiten und ersetzt darin $1, $2 usw. durch die Treffer der Klammern - soweit klar. Das Typen-Schema ist: string.replace(regexp, string)

    Wenn du da jetzt values["$2"] schreibst, dann löst JavaScript diesen Ausdruck erst auf. Aber höchstwahrscheinlich hat das values-Objekt keinen Member mit dem Namen »$2« (da wird noch nichts ersetzt, deswegen wird der String genau so benutzt), deshalb ergibt values["$2"] == undefined. Dieses »Ergebnis« muss aber einen String ergeben.

    Das heißt, deine Aufgabe kannst du mit replace() nicht umsetzen. Du kannst stattdessen erst mit exec() den Namen extrahieren. Den hast du dann als String, mit dem kannst du aus dem values-Objekt die entsprechende Ersetzung holen. Dann wendest du replace() mit replace(platzhaltername, values[platzhaltername]) an. $2 usw. brauchst du dann gar nicht.

    Mathias

  2. Hat da jemand eine Idee, wie ich mein Problem lösen könnte?

    Ja, z.b. so:

    <script type="text/javascript">  
    var t = '<td class="_variable_"> _andereVariable_';  
    var obj = {  
    variable: 'VAR 1',  
    andereVariable: 'VAR 2'  
    }  
    alert (t.replace( /_[^_]*_/g, find) );  
      
    function find(t){  
    var key = t.substring(1, t.length - 1);  
    return obj[key] || 'undefined'  
    }  
    </script>
    

    Struppi.