"Du mußt Dir also \w, \W und \b selbst aus Character-Klassen zusammenstricken."
Nix verstehen ... !
\b ist nichts anderes als die Zeichenklasse [^a-zA-Z0-9_]. D.h. »irgendein Zeichen, dass nicht ein lateinischer Buchstabe, eine arabische Ziffer oder der Unterstrich ist«.
Wie du gemerkt hast, sind die Millionen restlichen Schriftzeichen der Welt da ausgenommen, insofern ist \b nicht wirklich für natürlichsprachige Texte brauchbar.
Jetzt könntest du dir also eine genauere Zeichenklasse definieren, die zumindest die in deinem Text verwendeten Zeichen einschließt:
"Er, er ist groß, größer, ein noch größerer".match(/[^a-zA-ZüöäÜÖÄß]er[^a-zA-ZüöäÜÖÄß]/i)
Ergebnis: [ " er " ]
Um das erste und letzte freistehende »er« zu finden, müsstest du noch schreiben:
"Er war ein großer Verehrer, er war ein noch größerer Versager. er".replace(/(^|[^a-zA-ZüöäÜÖÄß])er($|[^a-zA-ZüöäÜÖÄß])/gi, "$1sie$2")
Ergebnis: "sie war ein großer Verehrer, sie war ein noch größerer Versager. sie"
Groß- und Kleinschreibung beibehalten wäre komplizierter, da müsste man vermutlich mit einer Ersetzungsfunktion arbeiten.
Mathias