пришла только такая мысль, сделать все скобки незапоминающими
/^(?:\d+)(?: р. )?(?:\d+)?(?: м. )?(?:\d+)?(?: дн. )?$/
а 3 группы заключить в запоминающие скобки
var re = /^((?:\d+)(?: р. )?)((?:\d+)?(?: м. )?)((?:\d+)?(?: дн. )?)$/,
m = '33 р. 444444 м. 555 дн. '.match(re);
if (m) {
alert('Первый индекс: ' + m['index']);
if (m[2]) alert('Второй индекс: ' + (m['index'] + m[1].length));
if (m[3]) alert('Третий индекс: ' + (m['index'] + m[1].length + m[2].length));
}