Отрицательное утверждение в регулярном выражении всегда равно "нулевой ширине"; то есть, нет определенной части строки, которая не соответствует.
Чтобы понять почему, рассмотрим строку «123», введенную в поле минут; очевидно, он не соответствует шаблону / 1 [0-2] | [1-9] /, но какая часть делает его не соответствующим? Это 3, оставляя вас 12? Или, может быть, 1, оставив вам 23? Или, может быть, оба 2 и 3 должны быть удалены, оставляя только 1?
Вместо того чтобы делать отрицательное утверждение, лучший подход в таком случае, как это, вероятно, состоит в том, чтобы обнаружить часть, которую вы хотите сохранить, захватить ее, а затем отбросить все остальное. Например, если вы сопоставите /^.*?(1[0-2]|[1-9])?.*?$/
, вся строка будет всегда совпадать, и действительная часть (если она есть) будет в переменной захвата $ 1; так что вы можете заменить всю строку этой захваченной частью, фактически удалив остальную часть (. *? в начале и в конце).