Как заставить определенные символы присутствовать, если перед ними стоит дополнительный символ? - PullRequest
0 голосов
/ 20 декабря 2018

Я хотел бы захватить строку, которая соответствует критериям:

  1. может быть пустым

  2. , если оно не пустое, оно должно иметьдо трех цифр (-> \d{1,3})

  3. может опционально сопровождаться заглавной буквой ([A-Z]?)
  4. может опционально сопровождаться косой чертой (т. е. /) (-> \/?);если после него идет косая черта, он должен иметь от одной до трех цифр (-> \d{1,3})

Вот правильный ввод:

  • 35
  • 35A
  • 35A / 44

Недопустимый ввод:

  • 34 / (обратите внимание на отсутствие цифры после '/')

Я придумал следующее ^ \ d {0,3} [AZ] {0,1} /? [1,3]? $ , которое удовлетворяет условиям1-3.Как мне справиться с 4 условием?Мой Regex дает сбой в двух случаях:

  • не совпадает, когда есть цифра, косая черта и цифра, например. 77A/7
  • совпадений, но это не должно происходить, когда естьцифра и косая черта, например 77/

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Это должно работать.Вы соответствовали необязательному слешу, а затем необязательной цифре от 1 до 3;это соответствует дополнительной комбинации косой черты и 1-3 любых цифр.Кроме того, ваше оригинальное регулярное выражение может совпадать с 0 цифрами в начале;Я считаю, что это было ошибкой, поэтому я исправил это.

var regex = /^(\d{1,3}[A-Z]{0,1}(\/\d{1,3})?)?$/g;

console.log("77A/7 - "+!!("77A/7").match(regex));
console.log("77/ - "+!!("77/").match(regex));
console.log("35 - "+!!("35").match(regex));
console.log("35A - "+!!("35A").match(regex));
console.log("35A/44 - "+!!("35A/44").match(regex));
console.log("35/44 - "+!!("35/44").match(regex));
console.log("34/ - "+!!("34/").match(regex));
console.log("A/3 - "+!!("A/3").match(regex));
console.log("[No string] - "+!!("").match(regex));
0 голосов
/ 20 декабря 2018

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

/^(?:\d{1,3}[A-Z]?(?:\/\d{1,3})?)?$/

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

Подробности

  • ^- начало строки
  • (?:\d{1,3}[A-Z]?(?:\/\d{1,3})?)? - необязательная группа без захвата:
    • \d{1,3} - от одной до трех цифр
    • [A-Z]? - необязательная прописная буква ASCII
    • (?:\/\d{1,3})? - необязательная группа без захвата:
      • \/ - / char
      • \d{1,3} - от 1 до 3 цифр
  • $ - конец строки.

Визуальный график (генерируется здесь ):

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...