Я новичок в регулярных выражениях. Я попытался найти ответ на мое дело, но потерпел неудачу. Я попробовал много идей, которые я нашел, но это не сработало для меня.
У меня есть специальный повторяющийся шаблон, который я пытался сопоставить, и я сделал большую часть этого, я не могу найти точное решение. Это то, что я сделал:
Мой RegEx
/((([a-zA-IK-Z][a]?)[\d]{1,3}[a-zA-Z]?)(-)?){1,}/g
Моя модель:
Aa200-B300-M52A-G5-Aa50 match (expected)
Aa200-B300-M52A-G5-A doesn't match (expected)
Aa200-B300-M52A-G5-Aa doesn't match (expected)
И для этих случаев это работает очень хорошо, но я хочу, чтобы это не соответствовало следующему примеру:
Aa200-B300-M52A- (ending with -)
Каков правильный путь к этому?
Вы можете использовать этот шаблон:
/^[a-zA-IK-Z]a?\d{1,3}[a-zA-Z]?(?:-[a-zA-IK-Z]a?\d{1,3}[a-zA-Z]?)*$/gm
Размещая -
в начале повторения без захвата группы мы уверены, что -
происходит только в середине, а не в конце.
Вы можете попробовать это. Он определяет, что если есть следующая группа, перед ней должна быть "-". Я также изменил ваши группы номеров от {1,3} до {0,3}, так как ваши ожидаемые совпадения не всегда имеют число в них (2-й и 3-й случаи). Надеюсь это поможет!
const regex = /^([a-zA-IK-Z]a?[\d]{0,3}[a-zA-Z]?)(-([a-zA-IK-Z]a?[\d]{0,3}[a-zA-Z]?))*$/;
console.log("Should match");
console.log("Aa200-B300-M52A-G5-Aa50".match(regex));
console.log("Aa200-B300-M52A-G5-A".match(regex));
console.log("Aa200-B300-M52A-G5-Aa".match(regex));
console.log("Should not match");
console.log("Aa200-B300-M52A-G5-".match(regex));