/^(B|C|AB|AC|BC|ABC)$/
Поскольку A
является необязательным префиксом, мы можем вынуть его и использовать ?
:
/^A?(B|C|BC)$/
Если вы хотитечтобы избавиться от дублирования B
и C
, может быть способ с регулярным выражением подпрограмм .К сожалению, они не работают в JS!Как насчет постобработки после ложного совпадения?
/^A?(B?)(C?)$/
Затем убедитесь, что хотя бы одна из двух групп захвата соответствует:
let re = /^A?(B?)(C?)$/;
for (let str of [
"A",
"B",
"C",
"AB",
"AC",
"ABC",
"BAC",
"CBA",
"AAB",
"ABBC"
]) {
let groups = str.match(re);
let match = (!!groups && (!!groups[1] || !!groups[2]));
console.log(str, match);
}