Después de que se me iluminara la bombilla con 
http://www.forosdelweb.com/f18/bbcode-citar-mensaje-con-cita-375546/, se me ha ocurrido como zanjar este tema.
Para quien le surja la misma duda o para quien se lo quiera mirar para encontrar posibles vulnerabilidades: 
 Código PHP:
    preg_match_all('/\[LINK\](?:http:\/\/)?([a-zA-Z0-9_\?=;\.\/\&#:]+)\[\/LINK\]/', $texto, $coincidencias, PREG_SET_ORDER );        
        
    foreach( $coincidencias AS $coincidencia )
    {
        $cadena = $coincidencia[0];
        if( !preg_match( "/javascript:/i", $cadena ) )
        {    $reemplazo = "<a href=\"\\1\" />\\1";
        }
        else
        {    $reemplazo = "";
        }
        $cadena = str_replace( '/', '\/', $cadena );
        $cadena = str_replace( '.', '\.', $cadena );
        $patron = "/\[LINK\](".substr( $cadena, 5, strlen( $cadena )-12 ).")\[\/LINK\]/";
        $texto = preg_replace( $patron,  $reemplazo, $texto );
    } 
    
  $texto es el texto a formatear.
Lo primero que hago es buscar los [LINK]www.web.com[/LINK] que existe en el texto y se guardan en $coincidencias. 
Se recorre cada una de las coincidencias y se aplica la expresión regular 
/javascript:/i para ver si existe la cadena prohibida.
Si existe la cadena prohibida, no se traduce [LINK] a <a href..>;
Si no existe la cadena prohibida se traduce [LINK] a <a href...>; 
Y ya está.