Вот так уже работает функция replace (). Если вторым параметром является функция, ему передается список аргументов, которые практически совпадают с массивом, возвращаемым функцией RegExp "exec ()". Функция возвращает то, что она хочет, чтобы соответствующая область была заменена.
Первым аргументом вызываемой функции является вся совпадающая строка. Второй и последующие аргументы - это захваченные группы из регулярного выражения (как ваш второй пример). Однако во втором примере вам понадобится функция с еще одним параметром для хранения всей совпадающей строки.
Пример:
var s = "hello world".replace(/(\w+)\s*(\w+)/, function(wholeMatch, firstWord, secondWord) {
return "first: " + firstWord + " second: " + secondWord;
});
alert(s); // "first: hello second: world"