You seem to target ECMAScript 2018+ JS environment.
You may use (?<name>pattern)
to define the named capturing groups in the pattern and $<name>
named replacement backreferences in the replacement pattern to refer to the strings captured with the named groups.
You may also enhance the code a bit using
const regex = new RegExp('<(?<open>[^>]+)>' + text.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + '<(?<close>[^>]+)>');
renderer.setProperty(node, 'innerHTML', node.innerHTML.replace(regex, '<$<open>>' + replaceText.replace(/\$/g, '$$$$') + '<$<close>>'));
NOTES
(?<open>[^>]+)
matches and captures the open tag into open
named group and (?<close>[^>]+)
captures the close tag into close
named group with [^>]+
pattern: 1 or more chars other than >
text.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')
is used to escape any special chars in text
replaceText.replace(/\$/g, '$$$$')
is required to correctly handle $1
like literal strings in the replacement text.