Regulární výrazy a JavaScript – metody match() a split()
V předchozích článcích jsme se věnovali obecnému úvodu do regulárních výrazů v JavaScriptu a probrali jsme také dvě metody objektu String, sloužící k manipulaci s regulárními výrazy. V tomto článku budeme pokračovat metodami match() a split().
Metody objektu String
Jak už jsme si řekli v předchozím článku, objekt String
disponuje celkem čtyřmi metodami sloužícími pro práci s regulárními výrazy. Metody search()
a replace()
již znáte, podívejme se tedy, co nám přinášejí zbývající dvě metody match()
a split()
.
match()
Zapisujeme ve tvaru řetězec.match(regexp)
, kde řetězec je text, v němž hledáme shodu s regulárním výrazem regexp. Funkce vrací pole. Obsah tohoto pole závisí na tom, zda regulární výraz obsahuje (respektive neobsahuje) modifikátor g
a zda se tak provádí (respektive neprovádí) globální vyhledávání:
- Pokud je modifikátor
g
nastaven, pole obsahuje všechny (pod)řetězce v řetězci, které odpovídají (celému) regulárnímu výrazu regexp. Pod indexem0
je uložen první vyhovující (pod)řetězec, pod indexem1
druhý (pod)řetězec a tak dále. - Pokud modifikátor
g
nastaven není, pole obsahuje v prvku s indexem0
řetězec odpovídající celému regulárnímu výrazu a v dalších prvcích pole (s indexy1
,2
,3
a dále) části řetězce odpovídající jednotlivým subvýrazům regulárního výrazu (za předpokladu, že regulární výraz má nějaké subvýrazy).
Z výše uvedeného plyne, že při globálním vyhledávání nelze získat části řetězce odpovídající subvýrazům regulárního výrazu. Tento problém je možno vyřešit pomocí metody exec()
objektu RegExp
, o níž budeme hovořit později.
Podívejme se nyní na příklady demonstrující rozdílné chování s použitím a bez použití modifikátoru g
.
//match() – příklad 1
alert(„Globální vyhledávání“);
var str=“15 USD, 10 EUR, 300 CZK“;
var re1=/(\d+)\s(\w+)/g;
var result1=str.match(re1);
for(var i=0;result1[i];i++) alert(„[„+i+“]: „+result1[i]);
V tomto případě bude navrácené pole (indexované od nuly) obsahovat 15 USD
, 10 EUR
a 300 CZK
.
//match() – příklad 2
alert(„Neglobální vyhledávání“);
var str=“15 USD, 10 EUR, 300 CZK“;
var re2=/(\d+)\s(\w+)/;
var result2=str.match(re2);
for(var i=0;result2[i];i++) alert(„[„+i+“]: „+result2[i]);
V tomto případě bude navrácené pole (indexované od nuly) obsahovat 15 USD
, 15
a USD
.
Malá poznámka – v obou příkladech (ukázkách) jsem pro zobrazení jednotlivých prvků pole použil for
cyklus, kde proměnná i
(inicializovaná na 0
a při každém průchodu inkrementovaná o jedničku) slouží k procházení polem shod (result1
respektive result2
). Cyklus se provádí do té doby, dokud existuje prvek pole s příslušným indexem. Tento for
cyklus budu pro výpis obsahu pole používat i v dalších příkladech.
split()
Zapisujeme ve tvaru řetězec.split(regexp,limit)
, kde řetězec je text, který chceme rozdělit na části, přičemž jako oddělovač bude použita část řetězce odpovídající regulárnímu výrazu regexp. Nepovinný parametr limit udává maximální počet částí, na které bude řetězec rozdělen. Funkce vrací pole řetězců, které představují jednotlivé části. Pokud v řetězci nebyl nalezen žádný oddělovač odpovídající regexpu, v prvním prvku navráceného pole (s indexem nula) bude původní text řetězce (viz druhý příklad).
//split() – příklad 1
var str=“Jarda,Pavel; Honza Karel ,Pepa“;
var re1=/[ ,;]+/;
var result1=str.split(re1);
for(var i=0;result1[i];i++) alert(„[„+i+“]: „+result1[i]);
V udedeném příkladu může být jako oddělovač použita libovolná kombinace znaků
(mezera), ,
(čárka) a ;
(středník). Navrácené pole (indexované od nuly) pak bude obsahovat prvky Jarda
, Pavel
, Honza
, Karel
a Pepa
.
//split() – příklad 2
var str=“Jarda,Pavel; Honza Karel ,Pepa“;
var re2=/@/;
var result2=str.split(re2);
for(var i=0;result2[i];i++) alert(„[„+i+“]: „+result2[i]);
V tomto případě (kde se jako oddělovač předpokládá pouze znak @
) nebude řetězec str
vůbec rozdělen a v result2[0]
tak bude shodný text jako v str
.
//split() – příklad 3
var str=“Jarda,Pavel; Honza Karel ,Pepa“;
var re3=/[ ,;]+/;
var result3=str.split(re3,3);
for(var i=0;result3[i];i++) alert(„[„+i+“]: „+result3[i]);
Třetí příklad se od prvního liší pouze tím, že byl použit výše zmíněný nepovinný parametr limit, který omezuje počet částí, jež se mají do výsledného pole uložit. Při v příkladu uvedeném limitu 3
se tak do pole result3
uloží jen Jarda
, Pavel
a Honza
.
Ke stažení
Veškeré zde uvedené příklady si můžete stáhnout a otestovat přímo ve svých prohlížečích, samozřejmě jen v případě, že podporují JavaScript a regulární výrazy.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Souboj na trhu s CPU pro servery: AMD vs. Intel
8. prosince 2023 -
Windows App: Pracujte odkudkoliv, kdykoliv
3. listopadu 2024 -
Rychlost serveru: Klíč k lepšímu umístění ve vyhledávačích
7. června 2024
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024