Первые 3 символа должны быть:
Примеры:
ABC-56789 (True)
AAA-56789 (False)
Я пробовал это:
/^[^ABC$|^ACD$|^BCD$][*-][5|8][0-9]{4}$/
В регулярном выражении есть дополнительные ^ и $, также вы используете [], когда вы, вероятно, имели в виду (). Что-то вроде /^(ABC|ACD|BCD)-(5|8)[0-9]{4}$/ может сработать?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы должны изменить регулярное выражение на следующее:
/^(ABC|ACD|BCD)-(5|8)[0-9]{4}$/
[] соответствует одиночным символам, но в начале вы хотите сопоставить три символа, поэтому вам нужно использовать () для создания группы захвата.
Это неправильное совпадение ABC*56789 и ABC-|6789
Спасибо что подметил это. Я забыл изменить [5|8] на (5|8).
Используйте это регулярное выражение:
const regex = /^(?:ABC|ACD|BCD)-[58][0-9]{4}$/;
[
'ABC-56789',
'AAA-56789'
].forEach(str => {
console.info(str, '==>', regex.test(str));
})Выход:
ABC-56789 ==> true
AAA-56789 ==> false
Объяснение регулярного выражения:
^ -- якорь в начале строки(?:ABC|ACD|BCD) -- группа без захвата с комбинациями ИЛИ- -- буквенное тире[58] -- 5 или 8[0-9]{4} -- четыре цифры$ -- якорь в конце строкиУзнайте больше о регулярном выражении: https://twiki.org/cgi-bin/view/Codev/TWikiPresentation2018x10x14Regex
Используйте круглые, а не квадратные скобки, чтобы сгруппировать шаблоны чередования:
^(ABC|ACD|BCD)-[58][0-9]{4}$
Как насчет использования этого выражения?
^(ABC|ACD|BCD)-[5|8]\d{4}$
[] означает набор символов. Таким образом, [ABC] означает любой A, B или C, а не ABC. И ^ означает отрицание в []. Таким образом, регулярное выражение, которое вы использовали, может не работать нормально. Если вы хотите сгруппировать токены, вы должны использовать (). Вы также можете использовать \d (цифра) вместо [0-9].
Вместо группы захвата 1, (ABC|ACD|BCD), рассмотрите возможность использования группы без захвата, (?:ABC|ACD|BCD). И то, и другое работает, конечно, но когда читатели увидят группу захвата, они могут предположить, что вы позже извлечете содержимое этой группы (чего вы не делаете), полагая, что вы использовали бы группу без захвата, если бы не делать это. Вряд ли шишка, конечно.
Используя одиночное чередование:
^(?:ABC|[AB]CD)-[58][0-9]{4}$
Объяснение
^ Начало строки(?: Группа без захвата для альтернатив
ABC Совпадение буквально| Или[AB]CD Подберите либо ACD, либо BCD) Закройте группу без захвата- Совпадение буквально[58] Соответствует 5 или 8`[0-9]{4} Сопоставьте 4 цифры от 0 до 9$ Конец строкиПосмотрите демоверсию regex101
Пожалуйста, не могли бы вы привести примеры положительных и отрицательных значений для текущего регулярного выражения?