demosthenes: suchen & markieren (ggf. ersetzen) von Text

Ich versuche folgendes zu realisieren (mein Niveau: blutiger Anfänger):
Ich habe eine Liste mit Namen (Größe noch nicht vorhersehbar, ich gehe einfach mal von 20 Stück aus).
Diese Liste möchte ich in eine javasctipt Datei packen (von Hand, verlange gar nicht das unmögliche es aus einer Text Datei auszulesen) und diese Namen, wenn sie denn auf einer Seite erscheinen, markieren zu lassen. Die Art der Markierung ist mir dabei erst einmal egal, ob farblich markiert oder mit Textzusatz versehen ist nicht wichtig, Hauptsache erkennbar.

Durch dieses, laut Autor eigentlich nutzlose, greasemonkey script:

// ==UserScript==
// @name           Harry is an idiot
// @namespace      http://manuelseeger.de
// @description    Replaces 'Harry Potter' with 'Heiner' on amazon
// @include        http://*amazon.*
// ==/UserScript==

(function() {
temp_body = String(document.body.innerHTML);
document.body.innerHTML = temp_body.replace(/Harry[-\s]*Potter/gi, 'Heiner');
})();

Bin ich auf die Idee gekommen, es mit replace zu versuchen:

(function() {
temp_body = String(document.body.innerHTML);
document.body.innerHTML = temp_body.replace(/Karl Mayer/g, 'Karl Mayer (merken)');
})();

Das hat nur 2 Nachteile:
Erstens, ich hab keine Ahnung, wie ich damit 2 oder mehr Namen (nicht nur Karl Mayer, sonder auch Fritz Müller soll ersetzt werden) suchen und jeweils durch Name und Zusatz (merken) ersetzen soll.
Zweitens: Ist das ganze dann doch wohl recht umständlich, da bei Änderung einzelner Namen immer mehr neue Zeilen auftauchen und bearbeitet werden müssen.

Sagt mir bitte, da gib es was besseres.

  1. hi,

    Das hat nur 2 Nachteile:

    M.E. hat es noch mehr - aber gut, darum kannst du dich ja später kümmern.

    Erstens, ich hab keine Ahnung, wie ich damit 2 oder mehr Namen (nicht nur Karl Mayer, sonder auch Fritz Müller soll ersetzt werden) suchen und jeweils durch Name und Zusatz (merken) ersetzen soll.
    Zweitens: Ist das ganze dann doch wohl recht umständlich, da bei Änderung einzelner Namen immer mehr neue Zeilen auftauchen und bearbeitet werden müssen.

    Sagt mir bitte, da gib es was besseres.

    Schreibe die Funktion so um, dass sie zu Ersetzendes und Ersatz als Parameter entgegennimmt. Aus zu Ersetzendem wäre dann ein neues RegExp-Objekt zu erzeugen.

    Zu Ersetzendes und Ersatz für die einzelnen Namen legst du dann in einem Array ab - läufst in einer Schleife darüber, und rufst die Funktion für jeden Eintrag einmal auf.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. Wenn mich nicht alles täuschst kannst du in neueren JavaScript-Versionen mit $n also zum Beispiel $1 den gefundenen Ausdruck wieder einfügen.
    Ob JavaScript auch nach Arrays ersetzt weiß ich nicht. Notfalls musst du dir halt eine Methode schreiben, die dir dein Array zuvor in einen gültigen Regulären Ausdruck mit Oder-Verknüpfung umschreibt.