Netscape 8.1: Kudrnatá závorka vrací úder

Mám rád kudrnaté závorky (curly brackets). Programátoři a lidé vládnoucí anglickým jazykem vědí, že mluvím o závorkách, jimž se v češtině říká složené. Nejen programátoři dále vědí, co jsou to regulární výrazy a k jaké speciální akci v nich tyto závorky slouží.

Kudrnaté závorky slouží k vyjádření počtu opakování určitého výrazu, říká se jim kvantifikátory. To však pro tento zápisek není až tak podstatné, protože jsem řešil úplně jiný problém. V textu, který jsem zpracovával reguláry, se vyskytovaly právě tyto závorky a já s nimi potřeboval pracovat. Napsal jsem si (v JavaScriptu podotýkám) jednoduchý regulární výraz a vše fungovalo krásně do chvíle, než jsem jej vyzkoušel v novém Netscape Browseru 8.1, který mi hlásil chybný kvantifikátor.

Krátkou prohlídkou výrazu jsem se přesvědčil, že žádné kvantifikátory nepoužívám, a pustil jsem se do zkoumání. Dost možná jsou mé znalosti regulárních výrazů chybné, přeci jen jsem spíše kodér než programátor, nicméně vždy jsem se domníval, že složená, tedy kudrnatá závorka se ve výrazu bere jako znak bez speciálního významu, pakliže neleží v patřičném kontextu. Pod tímto kontextem si osobně přestavím situaci, kdy je otevírací závorka následována číslicí či uzavírací, pakliže je kvantifikátor stále otevřený.

Firefox 1.5.0.4 se mnou souhlasí, IE6 se mnou souhlasí, Opery se mnou souhlasí, Netscape Browser 8.1 protestuje. Právě Netscape bere kudrnaté závorky jako speciální znaky ve většině případů, výjimkou je pouze jejich umístění ve výčtu (hranaté závorky).

Zajímavé je, že jádro Netscape Browseru 8.1 je založeno na Firefoxu. Schválně jsem si na školním stroji, který disponuje Firefoxem 1.0.6, zkusil aplikaci spustit. Vida! Stejná chyba.

Jak z toho ven?

Inu, řešení je snadné, stačí každý výskyt kudrnaté závorky mimo výčet nahradit její hexadecimální reprezentací (\x7B pro {, \x7D pro }; ne, předřazení zpětného lomítka nefunguje v Netscapu vždy, logiku v tom nehledám). Tento defenzivní styl vůbec není u regulárních výrazů na škodu, implementace v prohlížečích se v detailech liší i u zcela základních konstrukcí. A určování kontextu speciálních znaků je, zdá se, jedním z těchto rozdílů.

Ale možná se pletu já a prohlížeče jen projevovaly nadstandardní snahu regulár zpracovat. V tom případě bych byl rád, kdybyste mi situaci osvětlili. A nějaký link na článek, který by o regulárních výrazech vyprávěl poutavě, šířeji a přesně, by potěšil určitě nejen mne.

Díky!

22. 6. 2006, 12.27 | Javascript, AJAX.


Zanechte komentář





Můžete použít Texy! formátování.
Pokud se obsah boxů níže mění, zatímco píšete, potom žádné číslice nevyplňujte. V takovém případě antispam funguje, pouze se prohlížeči nepovedlo skrýt tento box.