Вам необходимо сделать каждый раздел регулярного выражения необязательным, чтобы вы могли опустить этот блок.
Вам нужно взять [h]
из одной из альтернатив - вы соответствуете 12h
, но не 01h
.
В конце не должно быть \d
.
Вы не можете использовать однозначные минуты или секунды. Там также нет необходимости в 60 или 60 м, так как это 1 м и 1 ч.
/^((0?[1-9]|1[0-2])h)?([1-5]?[0-9]m)?([1-5]?[0-9]s)?$/
DEMO
Нет необходимости заключать h
, m
и s
в квадратные скобки, так как они представляют собой одиночные символы.
Обратите внимание, что, поскольку каждый блок является необязательным, он также будет соответствовать пустой строке. Вы должны проверить это отдельно от регулярного выражения.