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.