Без обходных путей, которые еще не полностью поддерживаются всеми браузерами, вы также можете использовать замену, используя функцию обратного вызова только для выбранного соответствия.
str = str.replace(/__tt.*?tt__/g, m => m.replace(/ /g, "-"));
var str = 'This is a long text __tt where i want to replace some text tt__ between some character';
str = str.replace(/__tt.*?tt__/g, m => m.replace(/ /g, "-"));
console.log(str);
Примечание
Если вы хотите использовать один дефис при замене нескольких последовательных пробелов, вы можете повторить пробел 1 или более раз, используя +
или сопоставляя 1 или более пробельных символов, используя \s+
. В обновленном вопросе получите текст элемента:
var elm = document.getElementById("tt");
elm.textContent = elm.textContent.replace(/__tt[^]*?tt__/g, m => m.replace(/ +/g, "-"));
<textarea id="tt" rows="4" cols="50">This is a long text __tt where i want
to replace
some text tt__ between some character
</textarea>