Создаю регексп в глобальной области видимости.
var re = new RegExp("(\\d*)#(\\d*)", "ig");
Обращаюсь к нему в процедуре:
var arr = re.exec(tmp);
В первый раз всё работает, потом перестаёт искать.
Прочитал что устанавливается переменная начала поиска в последний найденный символ (его позицию).
Написал везде где вызывается так:
re.lastIndex = 0;
var arr = re.exec(tmp);
Но как-то это не очень красиво. А есть другие варианты решения проблемы?