Как мне проверить полный формат строки, используя регулярное выражение в JavaScript?

Я хочу проверить следующий формат строки:

'(:abc-xyz :abd-xyz-abx :v2-abc)'

Я попытался создать регулярное выражение как:

const regex = RegExp('^[(][:][a-z|0-9|-]+(?: [:][a-z|0-9|-]+)*[)]$');

Он работает для меня в большинстве случаев, но не может проверить, когда строка:

строка = '(:abc--xyz- :abc-xyz-abx- :v2-abc-)'

Как мне проверить строку, чтобы «-» разрешалось между словами, но не в конце каждого слова?

мое требование:

string='(:abc-xyz :abd-xyz-abx :v2-abc)' -> Correct (only valid format others are incorrect).

example :
string='(:abc--xyz :abd-xyz-abx :v2--abc)' -> Incorrect
string='(:abc-xyz :abd-xyz-abx :v2-abc-)' -> Incorrect
string='(:abc-xyz:abd-xyz-abx :v2-abc-)' -> Incorrect

https://regex101.com/r/kJwWPt/1

Я добавил вам ссылку regex101 - пожалуйста, укажите, ПОЧЕМУ другие недействительны

mplungjan 10.12.2020 11:20

Вам не нужно добавлять класс персонажа для каждого персонажа: вот так [(][:]. Вы можете опустить []. Но вам придется избегать метасимволов, таких как (, с помощью \

adiga 10.12.2020 11:22
Поведение ключевого слова "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) для оценки ваших знаний,...
1
2
103
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать - из класса символов и использовать необязательно повторяющиеся группы, в которых вы ставите префикс : и -

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

^\(:[a-z0-9]+(?:-[a-z0-9]+)*(?: :[a-z0-9]+(?:-[a-z0-9]+)*)*\)$

Объяснение

  • ^ Начало строки
  • \(: Матч (:
  • [a-z0-9]+ Совпадите 1+ раз с любым из a-z0-9
  • (?:-[a-z0-9]+)* По желанию повторить - и 1+ раз любое из a-z0-9
  • (?: Группа без захвата
    • :[a-z0-9]+
    • (?:-[a-z0-9]+)* По желанию повторить - и 1+ раз любое из a-z0-9
  • )* Закройте группу без захвата и повторите 0+ раз
  • \) Матч )
  • $ Конец строки

Демонстрация регулярных выражений

let pattern = /^\(:[a-z0-9]+(?:-[a-z0-9]+)*(?: :[a-z0-9]+(?:-[a-z0-9]+)*)*\)$/;
[
  "(:abc-xyz :abd-xyz-abx :v2-abc)",
  "(:abc--xyz- :abc-xyz-abx- :v2-abc-)",
  "(:abc--xyz :abd-xyz-abx :v2--abc)",
  "(:abc-xyz :abd-xyz-abx :v2-abc-)",
  "(:abc-xyz:abd-xyz-abx :v2-abc-)",
].forEach(s => console.info(`${s} ==> ${pattern.test(s)}`));

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