Non credo che puoi passare la regexp dall'esterno.
Sono necessari dei caratteri speciali che non riesci a passare facilmente.

Esempio:

msg = vecchia.replace(/([\s\%]parola)/gi, "<b class='giallo'>$1[/b]");

Naturalmente al posto di parola puoi mettere la stringa che vuoi (purche` non abbia caratteri speciali).


Se vuoi usare la tua sintassi, puoi provare:

var temp = parent.valorestr;
alert(temp);
var reg = new RegExp("([\s\%]"+temp+")", 'gi');

Pero` la stringa che sostituisce deve contenere il $1, quindi diventa:

msg = vecchia.replace(reg, "<b class='giallo'>$1[/b]");

Attenzione che ci sono delle backslash: il forum a volte le taglia, per cui fai un quote del messaggio prima del copia-incolla.