Используйте функцию в качестве второго аргумента метода replace
:
var replacement = { "to name": "Joe", "your name": "Fred", "link": "foo" };
string = string.replace(/\[([^\]]+)\]/g, function (_, group) {
return replacement[group];
});
О, и причина, по которой ваш шаблон соответствует только тексту [link]
, заключается в том, что он допускает использование только буквенно-цифровых символов в скобках, а не пробелы.
РЕДАКТИРОВАТЬ: Если содержимое скобок не имеет значения, и вы просто хотите заменить их по порядку, используйте массив вместо хеша:
var replacement = [ "Joe", "Fred", "foo" ];
var index = 0;
string = string.replace(/\[[^\]]+\]/g, function () {
return replacement[index++];
});