Отрицательный внешний вид (в настоящее время не поддерживается в Firefox) используется здесь для ограничения трех предыдущих цифр.Это ограничение может быть выполнено одинаково хорошо с отрицательным прогнозом, просто его нужно поместить перед 3-значным шаблоном:
(?:[0-35-8]\d\d(?<!(?:000|500|36[7-9]|3[7-9]\d|86[7-9]|8[7-9]\d)))
должно выглядеть как
(?!000|500|36[7-9]|3[7-9]\d|86[7-9]|8[7-9]\d)[0-35-8]\d\d
Обратите внимание, что группы без захвата здесь избыточны, я их удалил, и [01235678]
= [0-35-8]
.
Конечное регулярное выражение выглядит как
/^(?:19|20)?\d{2}(?!000|500|36[7-9]|3[7-9]\d|86[7-9]|8[7-9]\d)[0-35-8]\d\d\d{4}[vVxX]$/
См. regex demo и Regulex graph :
![enter image description here](https://i.stack.imgur.com/8KozP.png)