Найдите неотрицательные целые
Есть строка с целыми числами.
Создайте регулярное выражение, которое ищет только неотрицательные числа. Ноль разрешён.
Пример использования:
let regexp = /ваше регулярное выражение/g;
let str = "0 12 -5 123 -18";
alert( str.match(regexp) ); // 0, 12, 123
Регэксп для целого числа: \d+
.
Мы можем исключить отрицательные добавлением негативной ретроспективной проверки: (?<!-)\d+
.
Однако, если попробуем применить такой регэксп, то увидим лишний результат:
let regexp = /(?<!-)\d+/g;
let str = "0 12 -5 123 -18";
console.log( str.match(regexp) ); // 0, 12, 123, 8
Как видите, оно находит 8
из -18
. То есть, берёт только цифру из числа -18
, так как это формально подходит под регулярное выражение.
Чтобы исключить такой вариант, надо убедиться, что регэксп не будет искать число с середины другого (неподходящего) числа.
Мы можем сделать это добавлением ещё одной проверки: (?<!-)(?<!\d)\d+
. Теперь (?<!\d)
гарантирует, что поиск не начнётся после цифры.
Можем объединить проверки в одну:
let regexp = /(?<![-\d])\d+/g;
let str = "0 12 -5 123 -18";
alert( str.match(regexp) ); // 0, 12, 123