повторение регулярных выражений

1

regex noob здесь, я создал валидатор регулярных выражений для ввода, я пытаюсь проверить следующее:

{ word } //valid
{ word } ; { word } //also valid

поэтому я придумал это:

^[\s]*\{[a-zA-z\s]*\}[\s]*$|^[\s]*\{[a-zA-z\s]*\}[\s]*\;[\s]*[\s]*\{[a-zA-z\s]*\}[\s]*$

он работает, но проблема в том, что я ничего не могу добавить после этого. Я хочу повторить часть "; {word}" столько, сколько необходимо. Как я могу это сделать?

  • 1
    Используйте группу и квантификатор .
  • 0
    ты имеешь в виду {слово}; { слово } ; { слово } ; .... действует ? и должно ли это быть пробелом в начале и конце слова?
Показать ещё 6 комментариев
Теги:

2 ответа

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

Вы можете использовать

/^\s*{\s*[a-zA-Z]+\s*}\s*(?:;\s*{\s*[a-zA-Z]+\s*}\s*)*$/

См. Демо-версию regex

подробности

  • ^ - начало строки
  • \s*{\s*[a-zA-Z]+\s*}\s* - a { заключено с пробелами 0+, 1+ ASCII-буквы, а затем a } заключенные с пробелами 0+
  • (?: - начало группы, не связанной с захватом:
    • ; - полуколона
    • \s*{\s*[a-zA-Z]+\s*}\s* - a { заключено с пробелами 0+, 1+ ASCII-буквы, а затем a } заключенные с пробелами 0+
  • )* - ноль или более раз
  • $ - конец строки.
1

Просто используйте:

^((\{\s?[a-zA-Z]+\s?\}\s?;\s?)+)?(\{\s?[a-zA-Z]+\s?\}\s?;?\s?){1}$

соответствует всем этим случаям:

{ word }
{word}
{ word } ; { word } ; { word }
{ word } ; { word }
{word};{word};{word}
{word};{word}
{ word } ; { word } ; { word } ;
{ word } ; { word } ;
{word};{word};{word};
{word};{word};
  • 1
    \w также соответствует _ и цифрам. ОП не хотел им соответствовать.
  • 0
    Вы правы, я заменю \ w на [a-zA-Z], спасибо.

Ещё вопросы

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