molily: RegExp Replace, $1 durch Funktion umwandeln und dann ersetzen

Beitrag lesen

Hallo,

var body = document.getElementsByTagName("body")[0];

Schreib einfach document.body, das ist kürzer und schneller.

body.innerHTML = body.innerHTML.replace(/(\d+)|(\d+)/g, encodeCoord($1, $2));

Das geht so nicht.

encodeCoord($1, $2) wird nur einmal ausgeführt, und zwar kurz bevor replace einmal aufgerufen wird. $1 und $2 gibt es zu diesem Zeitpunkt nicht, deshalb gibt encodeCoord irgendetwas aus, was dann als String zum Ersetzen aller Treffer verwendet wird.

Siehe auch </archiv/2007/9/t159041/#m1034696>.

Du willst ja für jeden Treffer encodeCoord aufrufen. Das geht anders:

replace(regexp, funktionsobjekt)

also z.B.

replace(/(\d+)|(\d+)/g, encodeCoord)

encodeCoord wird jetzt für jeden Treffer aufgerufen.

encodeCoord erhält drei Parameter, der gesamte Treffer als 1. Parameter, den Teiltreffer der ersten Klammern als zweiten und den Teiltreffer der zweiten Klammer als dritten Parameter. Also nimmst du sie einfach so entgegen:

function encodeCoord (koordinate, x, y) {...}

Ansonsten wie gehabt, du nutzt x und y und gibts einen String zurück.

Mathias