Регулярное выражение содержит только числа с необязательными || / && и числом - PullRequest
1 голос
/ 06 августа 2020

примеры, когда регулярное выражение должно возвращать true: 1&&2, 1||2, 1&&2||3, 1 примеры, где регулярное выражение должно возвращать false: 1||, 1&&, &&2

Мое регулярное выражение:

[0-9]+([\\|\\|\\&&][0-9])* 

, но оно возвращает true, если на входе 1&&&2. В чем моя ошибка?

1 Ответ

1 голос
/ 07 августа 2020

Обратите внимание, что [\|\|\&&] соответствует одиночному символу | или &, а не || или && последовательностям символов. Кроме того, [0-9] без квантификатора соответствует только одному di git. Без привязок вы можете частично сопоставить строку внутри более длинной строки.

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

^[0-9]+(?:(?:\|\||&&)[0-9]+)*$

На самом деле, чтобы сопоставить любое место внутри строки, продолжайте использовать шаблон без привязок:

[0-9]+(?:(?:\|\||&&)[0-9]+)*

См. Демонстрацию регулярного выражения

Подробности

  • ^ - начало строки
  • [0-9]+ - 1+ цифр
  • (?:(?:\|\||&&)[0-9])* - 0 или более повторений
    • (?:\|\||&&) - || или && последовательность символов
    • [0-9]+ - 1+ цифр
  • $ - конец строки.

JS демонстрация:

const reg = /^[0-9]+(?:(?:\|\||&&)[0-9]+)*$/;
console.log( reg.test('1||2') ); // => true
...