Я думаю, что вы ищете следующее выражение:
/^((0?[1-9]|1[0-2])h)?((([0-5]?[0-9])|60)m)?((([0-5]?[0-9])|60)s)?$/
У вашего исходного выражения есть две основные проблемы: 1. \d
в конце и 2. захват области (обратите внимание на дополнительную Паренс в моем выражении).
Это также будет захватывать: 1h13s
Этот пример кажется информативным. Вы попробовали его?