Regulární výrazy, lidově známé jako „regex“ nebo „regexp“, jsou řetězce, které popisují vzor vyhledávání. Pomocí regulárních výrazů můžete zkontrolovat, zda řetězec obsahuje konkrétní vzor, extrahovat informace z řetězce a nahradit části řetězce novým textem.
Naučte se základní syntaxi regulárních výrazů a jak je používat v JavaScriptu.
Základní syntaxe regulárních výrazů
Existují dva způsoby, jak vytvořit regulární výraz v JavaScriptu: pomocí literálu regulárního výrazu a pomocí RegExp konstruktér.
Literál regulárního výrazu se skládá ze vzoru uzavřeného mezi lomítky, za kterým následuje volitelný příznak.
Například:
// Bez vlajky
konst regulární výraz_1 = /pattern/
// S příznakem
konst regulární výraz_2 = /pattern/vlajka
Příznak je volitelný parametr, který můžete přidat k regulárnímu výrazu a upravit jeho chování. Například:
konst regexFlag = /the/g;
The G příznak označuje, že výraz by se měl shodovat se všemi výskyty, nejen s prvním.
Můžete také vytvořit regulární výraz pomocí RegExp konstruktér. Například:
konst regulární výraz = NovýRegExp("Vzor", "G");
The RegExp konstruktor přebírá dva parametry: vzor – řetězec nebo literál regulárního výrazu – a příznak (s).
Existují dva poměrně běžné příznaky, které použijete s regulárním výrazem v JavaScriptu:
- G: Globální příznak způsobí, že regulární výraz bude odpovídat všem výskytům vzoru v daném řetězci namísto jediného výskytu.
- i: Příznak nerozlišující malá a velká písmena způsobí, že regulární výraz nebude brát ohled na velká a malá písmena ve vzoru a shoduje se s velkými a malými písmeny v daném řetězci.
Příznaky můžete použít společně v jediném výrazu v libovolném pořadí. Například:
konst regulární výraz = NovýRegExp("Vzor", "gi");
Tento výraz bude odpovídat všem výskytům „Vzoru“, bez ohledu na velikost písmen.
V regulárních výrazech mají určité znaky, známé jako metaznaky, zvláštní význam. Můžete je použít ke spárování konkrétních typů postav nebo vzorů.
Zde jsou některé z nejčastěji používaných metaznaků a jejich významy:
- Zástupný znak (.): Tento znak odpovídá libovolnému jednotlivému znaku kromě nového řádku. Je to užitečný nástroj pro porovnávání vzorů s neznámými znaky.
- Hvězda Kleene (*): Tento znak odpovídá žádnému nebo více výskytům předchozího znaku nebo skupiny. Umožňuje, aby se předchozí znak nebo skupina objevila v řetězci kolikrát, včetně nuly.
- Volitelný znak (?): Tento znak odpovídá žádnému nebo jednomu výskytu předchozího znaku nebo skupiny.
- Začátek čárové kotvy (^): Tento znak odpovídá pouze začátku řádku nebo řetězce.
- Kotva na konci řádku ($): Tento znak odpovídá konci řádku nebo řetězce.
- Znaková sada/třída ([]): Znaková sada odpovídá libovolnému znaku ze sady znaků v řetězci. Definujete je pomocí hranatých závorek [] a můžete zadat sadu pevných znaků, speciálních znaků nebo určitých skupin znaků.
- Alternativní postava (|): Tento znak odpovídá předchozímu nebo následujícímu znaku nebo skupině. Funguje to podobně jako na OR JavaScriptový operátor.
- Seskupovací znak (()): Seskupovací znak umožňuje seskupovat znaky nebo podvýrazy, aplikovat na ně operátory jako jednotku a řídit pořadí operací.
Testování řetězce proti regulárnímu výrazu v JavaScriptu
V JavaScriptu můžete testovat řetězec proti regulárnímu výrazu pomocí několika metod.
Tato část předpokládá, že máte základní znalosti o regulárních výrazech a vzorech. Pokud vám nevyhovují regulární výrazy, podívejte se průvodce regulárními výrazy pro začátečníky První.
Testovací metoda
The .test() metoda vrací boolean označující, zda regulární výraz odpovídá řetězci či nikoli. Tato metoda bere jako argument řetězec k provedení vyhledávání. Je to užitečné zejména pro jednoduché kontroly.
Například:
nechat regulární výraz = /.com$/;
nechat str = "example.com";
řídicí panel.log (regex.test (str)); // skutečný
Tento regulární výraz odpovídá řetězci, který končí „.com“.
Metoda exec
The .exec() metoda vrací pole obsahující odpovídající text a všechny zachycené skupiny nebo nula pokud nenajde shodu. Tato metoda bere jako argument řetězec k provedení vyhledávání. Je to užitečné pro složitější regulární výrazy.
Například:
nechat regulární výraz = /^\\(?([0-9]{3})\\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/;
nechat str = "123-456-7890";
nechat vysledek = regex.exec (str);
-li (výsledek!== nula) {
řídicí panel.log(`${result[0]} je platné telefonní číslo.");
} jiný {
řídicí panel.log("Neplatné telefonní číslo");
}
Regulární výraz výše odpovídá řetězci, který začíná volitelným "(", tři číslice a volitelný ")". Poté hledá volitelné "-", ".“, nebo mezera, za kterou následují tři číslice. Nakonec hledá volitelné "-", ".", nebo mezera následovaná čtyřmi číslicemi na konci řetězce.
Tento regulární výraz odpovídá telefonním číslům ve formátu „(xxx) xxx-xxxx“, „xxx-xxx-xxxx“, „xxx.xxx.xxxx“ nebo „xxx xxx xxxx“.
Pokud najde shodu, .exec() vrátí pole obsahující odpovídající text a všechny zachycené skupiny (definované závorkami). Zahrne každou skupinu jako další prvek v poli, které vrátí. To vám umožní přístup ke konkrétním částem shodného textu, což vám může pomoci extrahovat informace z řetězce.
Metoda nahrazení
The .nahradit() metoda hledá shodu mezi regulárním výrazem a řetězcem a nahradí odpovídající text zadaným náhradním textem. Toto je metoda řetězcových objektů a jako argumenty používá regulární výraz a náhradní řetězec.
Například:
nechat řetězec = "Rychlá hnědá liška přeskakuje líného psa.";
nechat výraz = /The/gi;
nechat newString = string.replace (výraz, "A");
řídicí panel.log (novýString); // "rychlá hnědá liška přeskočí líného psa."
Tento příklad volá nahradit() metoda na tětiva proměnná, předávání regulárního výrazu, výraz. Regulární výraz bude odpovídat všem výskytům „The“ v řetězci, bez ohledu na velikost písmen. Volání metody replace jí dává pokyn, aby nahradila každý výskyt řetězcem „a“.
Úvahy o výkonu při používání regulárních výrazů
I když regulární výrazy pomáhají porovnávat a manipulovat s řetězci, mohou být také nákladné z hlediska výkonu. Aby byly vzory co nejkonkrétnější a aby byly jednoduché, je důležité, aby byly funkční.