Вы можете достичь желаемого результата, заменив строку на обратный вызов, используя регулярное выражение:
(delta|frac|pi|sqrt|alpha|to)|([a-z](?=[a-z]))
, которое соответствует одному из исключенных слов в группе 1 или букве, за которой следует другая буква в группа 2. В обратном вызове, если присутствует группа 1, возвращается, в противном случае возвращается группа 2, за которой следует *
:
let str = '22+2p+p^{pp^{2p+pp}}+\\delta+\\pi+\\sqrt(2p)+\\\\frac{2}+{2p}+ppp+2P+\\sqrt(9)+xx+\\to+p2+\\pi+px+ab+\\alpha';
const replacer = (m, p1, p2) => {
return p1 ? p1 : (p2 + '*');
}
console.log(str.replace(/(delta|frac|pi|sqrt|alpha|to)|([a-z](?=[a-z]))/gi, replacer));