zpět k lekci

Najděte nezáporná čísla

Máme řetězec celých čísel.

Vytvořte regulární výraz, který mezi nimi najde jen nezáporná čísla (včetně nuly).

Příklad použití:

let rv = /váš RV/g;

let řetězec = "0 12 -5 123 -18";

alert( řetězec.match(rv) ); // 0, 12, 123

Regulární výraz pro celé číslo je \d+.

Záporná čísla můžeme vyloučit tak, že před něj umístíme negativní zpětné nahlédnutí: (?<!-)\d+.

Když to však nyní vyzkoušíme, můžeme si všimnout jednoho výsledku „navíc“:

let rv = /(?<!-)\d+/g;

let řetězec = "0 12 -5 123 -18";

console.log( řetězec.match(rv) ); // 0, 12, 123, 8

Jak vidíte, našel i 8 z -18. Abychom to vyloučili, musíme zajistit, že RV nezačne hledat shodu uprostřed jiného (neodpovídajícího) čísla.

Můžeme to udělat uvedením dalšího negativního zpětného nahlédnutí: (?<!-)(?<!\d)\d+. Nyní (?<!\d) zajistí, že shoda nebude začínat po jiné číslici, což je přesně to, co potřebujeme.

Můžeme je také spojit do jediného zpětného nahlédnutí následovně:

let rv = /(?<![-\d])\d+/g;

let řetězec = "0 12 -5 123 -18";

alert( řetězec.match(rv) ); // 0, 12, 123