в MathInput сохранять где-то текст, который получился. Если новый текст не прошел валидацию, возвращать старый.
В идеале хорошо бы ещё позицию курсора возвращать - юзер может редактировать где-то в середине строки.
И конечно, сделать регекс таким образом, чтобы пустую строку допускал (в твоем примере - /^[0-9a-fA-F]{0,4}$/ig)
|