сабжевая замена делается за один реплейс.
Упрощенный пример: в тексте есть числа, и те из них, которые больше 100, заменить на слово "PREVED"
var str = "gdfnfdn 6546754 tehterth 4 474 ghgfd 67 hfgdggj 111";
var strNew = str.replace(/\d+/g, function(a) {
return parseInt(a, 10) > 100 ? "PREVED" : a;
});
alert(strNew);
как этот пример допилить к сабжу, думаю, понятно.
---
но это если операции с файловой системой синхронные. А если асинхронные (как и должно быть на сервере) - то чуть сложнее: обходим строку в цикле, как в твоем коде, находим все файлы, добавляем их в карту и по каждому запускаем асинхронный fs.exists. Калбэки к fs.exists подставляют в карту значения true, если файл есть. Ну и последний сработавший калбэк делает вышеупомянутый реплейс, используя карту.