Хотя я подозреваю, что можно написать регулярное выражение, которое будет выполнять независимое сопоставление позиции / последовательности, у меня болит голова, я просто думаю об этом. Поэтому, даже если бы я мог найти способ сделать это, я бы не реализовал его - код должен быть читаемым и разбираемым людьми. Глядя на то, что вы здесь представили, я думаю, что я гораздо лучше знаком с регулярными выражениями, чем вы, так что даже больше причин не делать этого.
Ваши альфа / числовые / специальные регулярные выражения будут только соответствует строке, содержащей буквы, цифры или специальные символы, а не смесь. Если вы измените их таким образом, то сможете проверить совпадение всех трех (и экранировать метасимволы в специальном регулярном выражении):
let alpha = /[A-Za-z]/i;
let numer = /[0-9]/;
let special = /[!@#$%\^&*(),\.?;":{}|<>\']/;
if (password.match(alpha) && password.match(numer) && password.match(speicial)) {