⊗jsSpREGL 101 of 294 menu

Omezení chamtivosti v regulárních výrazech v JavaScriptu

Regulární výrazy jsou ve výchozím nastavení chamtivé. To znamená, že zachytávají maximální možný počet znaků. Pojďme si to rozebrat na příkladu. Předpokládejme, že máme takovýto řetězec:

let str = 'aeeex zzz x kkk';

Předpokládejme, že v tomto řetězci chceme najít podřetězec 'aeeex' podle následujícího vzoru: písmeno 'a', poté jakýkoli znak jeden nebo více krát, poté písmeno 'x'.

let res = str.replace(/a.+x/g, '!');

Očekávali bychom, že se do proměnné ve výsledku zapíše řetězec '! zzz x kkk'. Avšak tak to není - do proměnné se dostane řetězec '! kkk'.

Všechno je to tím, že naše regulární výraz hledá všechny znaky od písmene 'a' až po písmeno 'x'. Ale v našem řetězci jsou dvě písmena 'x'! Kvůli chamtivosti se stane, že regulární výraz hledá až do posledního 'x', čímž zachytí ne to, co jsme očekávali.

Samozřejmě, často je toto chování přesně to, co potřebujeme. Ale konkrétně v tomto případě bychom chtěli zrušit chamtivost a říci regulárnímu výrazu, aby hledal pouze k prvnímu 'x'.

Chcete-li omezit chamtivost, je třeba za operátorem opakování umístit otazník:

let res = str.replace(/a.+?x/g, '!');

Chamtivost lze omezit u všech operátorů opakování: ať už *, ?, nebo {} - takto: *?, ?? a {}?.

Je dán řetězec:

let str = 'aba accca azzza wwwwa';

Napište regulární výraz, který najde všechny řetězce na jejichž okrajích stojí písmena 'a', a nahradí každý z nich na '!'. Mezi písmeny 'a' může být jakýkoli znak (kromě 'a').

Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout