Js регулярное выражение не работает. Точное совпадение и/или операция

Первые 3 символа должны быть:

  • Точно либо ABC, либо ACD, либо BCD
  • Затем следует дефис -
  • Затем следует либо 5, либо 8
  • Тогда любые 4 числа

Примеры:

ABC-56789 (True)
AAA-56789 (False)

Я пробовал это:

/^[^ABC$|^ACD$|^BCD$][*-][5|8][0-9]{4}$/

Пожалуйста, не могли бы вы привести примеры положительных и отрицательных значений для текущего регулярного выражения?

evolutionxbox 02.02.2023 02:09

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

evolutionxbox 02.02.2023 02:11
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
52
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Вы должны изменить регулярное выражение на следующее:

/^(ABC|ACD|BCD)-(5|8)[0-9]{4}$/

[] соответствует одиночным символам, но в начале вы хотите сопоставить три символа, поэтому вам нужно использовать () для создания группы захвата.

Это неправильное совпадение ABC*56789 и ABC-|6789

Peter Thoeny 02.02.2023 02:17

Спасибо что подметил это. Я забыл изменить [5|8] на (5|8).

Geshode 02.02.2023 04:05

Используйте это регулярное выражение:

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). И то, и другое работает, конечно, но когда читатели увидят группу захвата, они могут предположить, что вы позже извлечете содержимое этой группы (чего вы не делаете), полагая, что вы использовали бы группу без захвата, если бы не делать это. Вряд ли шишка, конечно.

Cary Swoveland 02.02.2023 03:00

Используя одиночное чередование:

^(?:ABC|[AB]CD)-[58][0-9]{4}$

Объяснение

  • ^ Начало строки
  • (?: Группа без захвата для альтернатив
    • ABC Совпадение буквально
    • | Или
    • [AB]CD Подберите либо ACD, либо BCD
  • ) Закройте группу без захвата
  • - Совпадение буквально
  • [58] Соответствует 5 или 8`
  • [0-9]{4} Сопоставьте 4 цифры от 0 до 9
  • $ Конец строки

Посмотрите демоверсию regex101

Другие вопросы по теме