Hi,
$pattern = '#<(a|area)\s[^>]*href=("|')?(?<!javascript:)(.*)\2.*>#Ui';
Du hast eine Lookbehind-Assertion, Du willst aber eine Lookahead-Assertion. Dein alter Pattern endet nämlich beim Quote-Zeichen, d.h. (?<!javascript:) vergleicht, ob der String 'href="' (+ noch die paar Zeichen, die davor kommen) NICHT gleich 'javascript' ist, was immer wahr ist.
Du willst eine Lookahead-Assertion, weil Du ja wissen willst, ob das, was NACH der Position kommt, 'javascript:' ist. Also (?!javacript:) statt (?<!javascript:).
Viele Grüße,
Christian