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.

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.

Buďme ve spojení, přihlaste se k newsletteru

Odesláním formuláře souhlasíte s podmínkami zpracováním osobních údajů. 
Více informací v Ochrana osobních údajů.

Autor článku: Jan Polzer

Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Web Development Director v Lesensky.cz. Ve volných chvílích podnikám výlety na souši i po vodě. Více se dozvíte na polzer.cz a mém LinkedIn profilu.

Komentáře k článku

návštěvník

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é.

Profile picture for user Jan Polzer

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.

Přidat komentář

Odesláním komentáře souhlasíte s podmínkami Ochrany osobních údajů

reklama
Moje kniha o CMS Drupal

 

Kniha 333 tipů a triků pro Drupal 9


Více na KnihyPolzer.cz

Sledujte Maxiorla na Facebooku

Maxiorel na Facebooku

Hosting pro Drupal a WordPress

Hledáte český webhosting vhodný nejenom pro redakční systém Drupal? Tak vyzkoušejte Webhosting C4 za 1200 Kč na rok s doménou v ceně, 20 GB prostoru a automatické navyšováním o 2 GB každý rok. Podrobnosti zde.

@maxiorel na Twitteru

Maxiorel na Twitteru