Я хотел бы заменить символ (переменной) внутри строки, вот мой пример:
var oldId = 5;
var newId = 6;
var content = 'text tes_5 as name[5] end';
content = content.replace(new RegExp('name\['+oldId+'\]', 'g'), 'name['+newId+']');
Почему результат text tes_5 as name[5] end?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


При использовании конструктора регулярных выражений двойное экранирование:
var oldId = 5;
var newId = 6;
var content = 'text tes_5 as name[5] end';
content = content.replace(new RegExp('name\\['+oldId+'\\]', 'g'), 'name['+newId+']');
console.info(content);Вам нужно экранировать обратную косую черту, потому что обратная косая черта является escape-символом как для строковых литералов, так и для регулярных выражений.
var oldId = 5;
var newId = 6;
var content = 'text tes_5 as name[5] end';
content = content.replace(new RegExp('name\\['+oldId+'\\]', 'g'), 'name['+newId+']');
console.info(content);В ES6 вы можете использовать литерал шаблона с тегом String.raw. Это предотвращает обработку управляющих последовательностей внутри литерала.
var oldId = 5;
var newId = 6;
var content = 'text tes_5 as name[5] end';
content = content.replace(new RegExp(String.raw`name\[${oldId}\]`, 'g'), 'name['+newId+']');
console.info(content);
Очень вероятно: ваше регулярное выражение ничему не соответствует и ничего не заменяется.