RegExpBuilder: regulární výrazy v JavaScriptu snadno a rychle

Pokud něco v programování nesnáším, jsou to regulární výrazy. Možná nejsou tak složité, ale jejich syntaxi jsem se nikdy nebyl schopen naučit. Nějak bych je splácal v PHP, v JavaScriptu zřejmě už ne. Naštěstí nemusím. Je to povedená javascriptová knihovna RegExpBuilder.

Reklama

Pro začátečníky: k čemu regulární výrazy slouží? Jsou to speciální zápisy sloužící k identifikaci určitého zápisu v textovém řetězci. Řekněme, že máte rozsáhlý text a chcete v něm pomocí nějakého programovacího jazyka najít všechna slova začínající velkým písmenem. Nebo například všechny zápisy číslic následované řetězcem Kč. Právě k tomuto účelu vám regulární výrazy skvěle poslouží.

Je spousta možností, jak regulární výrazy zapisovat, záleží na konkrétní implementaci v konkrétním programovacím jazyce. Nesetkáte se s nimi jenom při programování, ale i v různých programech. Podporuje je třeba PSPad nebo Total Commander.

Regulární výrazy v JavaScriptu

Zpět do světa programování a JavaScriptu. Regulární výrazy se zde zapisují pomocí syntaxe /vzorek/modifikátor.

Řekněme, že máte masu textu a chcete v něm vyhledat slova Maxiorel, lhostejno přitom, zda jsou psány s velkým nebo malým písmenem na začátku. Pak byste použili následující kousek kódu:

var str = “Nějaký dlouhý text se slovy Maxiorel nebo maxiorel”;
var n = str.search(/maxiorel/i); // výsledkem bude 28, tedy pozice slova Maxiorel

JavaScriptový regulární výraz /maxiorel/i je vcelku srozumitelný a snadno se jej naučíte. Nicméně problém je v modifikátorech, kterých je celá řada a nemusejí být pro každého intuitivní. Jejich přehled najdete třeba na stránce JavaScript RegExp Reference.

Proto vznikla zajímavá javascriptová knihovna s názvem RegExpBuilder. Pokud ji zakomponujete do svého projektu, pak stačí třeba k nalezení ceny v dolarech použít následujících pár řádků.

var regex = r
  .find(“$”)
  .min(1).digits()
  .then(“.”)
  .digit()
  .digit()
  .getRegExp();

Jistě, regulární výraz je úspornější, ale řekněte sami, je přehlednější výše uvedený zápis nebo regulární výraz /\$\s*[0-9,]+(?:\s*.\s*\d{2})?/g ?

Oba zápisy slouží k prohledání vstupního textu, kdy je nejprve nalezena značka dolaru a pokud za ní následuje alespoň jedno číslo následované tečkou a dvěma dalšími číslicemi, je nalezena cena.

Byť řada programátorů nemá ráda projekty přeplněné nejrůznějšími pomocnými knihovnami, doporučuji na RegExpBuilder v rámci vašich projektů v JavaScriptu kouknout.

Reklama

Komentáře

Souhlasím, že potkat složité regulární výrazy ve starém projektu je často noční můra. Správnou dokumentací a testy se z nich ale stávají velice silní pomocníci.

Uvedený regulární výraz neodpovídá tomu, co bych podle zápisu v RegExpBuilderu čekal. V hezké zápisu je konstrukce ".min(1).digits()", které v regulární výrazu odpovídají věci jako "11", "11,9", "11,11,2", ",", "1", ",,," atd. což není vždy správně. Dále pro mě nelogický je ve výrazu vše počínaje ".then(“.”)" nepovinné. Bylo by také vhodné zmínit, že všechny mezery jsou automaticky přeskakovány při vyhodnocení.

Ač mají regulární výrazy složitou syntaxi, je k nim mnoho nástrojů, které pomohou s jejich pochopení a odzkoušení. Naopak podobné knihovny vedou k tomu, že musím nastudovat konkrétní knihovnu a hlavně, že případné chyby se složitě ladí. Chyby, které takhle mohou třeba při validaci vzniknout jsou skoro neviditelné.

Díky za upřesnění. Ještě dodám, že RegExpBuilder má i funkci pro otestování, zda zadaná posloupnost definice najde opravdu požadovanou část textu. Sám občas používám i program Regex Buddy.

Ale souhlasím, že je to něco za něco. Buď se naučím univerzální postup pro regulární výrazy a pak mám vystaráno, nebo se musím učit knihovnu a když přijdu k cizímu projektu, jsem v koncích.

Tvořím weby. Nabízím poradenství pro Drupal. Jsem na Twitteru.

Přidat komentář