regex - поиск шаблона, который может содержать символ, но не заканчиваться на нем (JavaScript)?

1

Я новичок в регулярных выражениях. Я попытался найти ответ на мое дело, но потерпел неудачу. Я попробовал много идей, которые я нашел, но это не сработало для меня.

У меня есть специальный повторяющийся шаблон, который я пытался сопоставить, и я сделал большую часть этого, я не могу найти точное решение. Это то, что я сделал:

Мой 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 -)

Каков правильный путь к этому?

Теги:

2 ответа

2
Лучший ответ

Вы можете использовать этот шаблон:

/^[a-zA-IK-Z]a?\d{1,3}[a-zA-Z]?(?:-[a-zA-IK-Z]a?\d{1,3}[a-zA-Z]?)*$/gm

Демо-версия RegEx

Размещая - в начале повторения без захвата группы мы уверены, что - происходит только в середине, а не в конце.

  • 0
    Я вижу, что и ваш, и шаблон регулярных выражений @rje делают свою работу. Может ли один или оба из вас объяснить мне, в чем преимущество одного из этих решений? Это было бы оценено.
  • 0
    Я не уверен, как другие регулярные выражения (в текущей форме) работает для вас. Это требует начала и конца якоря для работы. Даже если вы добавите якорь, это регулярное выражение будет очень длинным и неэффективным. Для того же ввода требуется 414 шагов по сравнению с 167 в моем,
Показать ещё 1 комментарий
0

Вы можете попробовать это. Он определяет, что если есть следующая группа, перед ней должна быть "-". Я также изменил ваши группы номеров от {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));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню