Regex – Úvod do regulárních výrazů Pt2

V první části jste prozkoumali základy nebo Regex – co to je a jak funguje – spolu s několika příklady. Bylo to tedy zaměřeno spíše na teorii. Dnes přejdete na praktickou stránku a procvičíte si na různých příkladech. V těchto úryvcích budete také pracovat s některými metodami obsaženými v objektu String . Pokud nejste obeznámeni s řetězci, můžete se nejprve podívat na některý z předchozích výukových programů týkajících se tohoto tématu.

V Regexu můžete použít mnoho sekvencí, znaků a dalších entit k vytvoření výrazu pro pozdější použití. Těmto entitám jsme se věnovali v předchozí části. Jejich seznam však uvedu i zde, abyste nemuseli přepínat mezi stránkami. Seznam je níže a s tím, co bylo řečeno, můžete pokračovat v objevování světa Regex.

Speciální sekvence:

- . - dot
- \d – any digit: [0-9]
- \D – any character (not a digit): [^0-9]
- \w – any digit, a letter (lowercase or capital) or underscore: [0-9a-zA-Z_]
- \W – any character which is not a digit, a letter, and an underscore: [^0-9a-zA-Z_]
- \s – any whitespace: [ \t\r\n\v\f]
- \S – any non-whitespace: [^ \t\r\n\v\f]
- note: “^” will negate whole set like in examples in list

Speciální znaky:

- \n – new line (0x0A)
- \f – page break (0x0C)
- \r – “carriage return” (0x0D)
- \t – horizontal tab character (0×09)
- \v – vertical tab character (0x0B)

Opakování:

- {n} – exactly n occurrences of the preceding expression
- {n,} – n or more occurrences of the preceding expression
- {n,m} – from n to m occurrences of the preceding expression
- ? – preceding item is optional (may occur 0 or 1 time)
- + – preceding element can occur one or more times
- * – preceding element can occur zero or more times

Příznaky:

- g – search globally
- i – ignore case sensitive
- m – multi-line input, starts with “^”, ends with “$”; in other words processing is applied to a string containing multiple lines

– poznámka:RegExr je skvělá stránka pro procvičování práce s regulárními výrazy. Můžete také vyzkoušet JSBin nebo Codepen.

Dostupné metody pro Regex

Již jste obeznámeni s metodami obsaženými v objektu Regex (exec(), test(), toString() ). Tím však cesta nekončí. Jak víte, Regex pracuje s řetězci. To vám dává možnost používat metody z objektu řetězce spolu s Regex k dosažení toho, co chcete. Tyto metody jsou match() , hledat() , nahradit() a rozdělit() . Podívejme se na každý z nich zvlášť, pochopíme, jak fungují, a poté si to procvičíme na několika příkladech.

match()

První metodou je match() . Pomocí této metody můžete použít výraz ke shodě řetězce, který potřebujete. Pokud použijete výraz s g flag (hledat globálně), vrátí pouze první výskyt nebo hodnotu null, pokud neexistuje žádná shoda. S g příznak vrátí pole obsahující všechny shody z celého řetězce. Vezměme si nějaký text a pokusme se porovnat jednoduché slovo.

JavaScript:

// dummy text
var string = "Tousled messenger bag 3 wolf moon aesthetic cold-pressed umami, pour-over distillery Kickstarter Marfa shabby chic salvia Portland fixie roof party. Cupidatat Shoreditch pork belly Kickstarter. Tumblr skateboard mlkshk, sapiente umami direct trade fashion axe PBR roof party. Bushwick veniam aute, sartorial reprehenderit laboris ut qui synth kale chips. Helvetica Intelligentsia shabby chic placeat. Art party farm-to-table veniam next level magna Pitchfork. Cardigan disrupt Thundercats, before they sold out Blue Bottle exercitation gastropub pariatur bicycle rights McSweeney's Neutra fashion axe gluten-free locavore excepteur.";

// match the word roof in global search
var result = string.match(/roof/g);

console.log(result); 
// result - [“roof”, “roof”]

OK. To bylo příliš snadné. Zkusme přiřadit slova se šesti písmeny. To lze provést pomocí entity „\b“, která označuje slovo b oundary jako začátek nebo konec řetězce, mezery a interpunkce. Protože chceme, aby slovo mělo přesně šest písmen, musíme použít „\b“ na začátku výrazu pro označení začátku slova a také na konci, aby se již žádná slova nevrátila. Dále budete potřebovat „\w“ k zahrnutí jakéhokoli znaku, číslice nebo podtržítka následovaného „{6}“. To v kombinaci s „\w“ znamená šest opakování libovolného slova atd. v jednom řetězci.

JavaScript:

// Match method for six letter words
var result = string.match(/\b\w{6}\b/g);

// result - ["shabby", "salvia", "Tumblr", "mlkshk", "direct", "veniam", "shabby", "veniam", "before", "Bottle", "rights", "Neutra", "gluten"]

Podobný výraz můžete použít pro přiřazení skupiny čísel nebo dvou čísel nebo čísla mobilního telefonu. Řekněme tedy, že chcete porovnat pouze číslo složené ze tří skupin čísel se třemi čísly v každé skupině. Opět použijete „\b“ k označení začátku a konce každé skupiny. Místo „\w“ použijete „\d“ pro d igit následovaný „{3}“ (tři čísla). Tento token (\b\d{3} ) se bude opakovat třikrát (tři trojmístné skupiny). Mezi prvními dvěma a posledními dvěma tokeny budou hranaté závorky obsahující „(mezera)-.“. To říká, že skupiny čísel mohou být odděleny mezerou, čárkou nebo tečkou.

Může však nastat případ telefonního čísla napsaného v jednom kusu. Nebojte se toho, jste zahrnuti. Stačí použít „|“ (jako operátor OR) následovaný podobným tokenem, který jste použili pro třímístný řetězec, pouze nyní použijete „{9}“. Pokud chcete, aby bylo vráceno více než první výskyt, nezapomeňte na příznak „g“.

JavaScript:

// nine-digit number
var example = “123-956-225, 122563, 246 324 889, 656 2336, 664-484-2332, 123456789”;

// Match method
var number = example.match(/\b\d{3}\b[ -.]?\d{3}[ -.]?\d{3}\b|\b\d{9}\b/); 

// result - [“123-956-225”, “246 324 889”, “123456789”]

-poznámka:Tento úryvek byste neměli používat k ověřování čísel, protože je příliš jednoduchý.

hledat()

Další metodou je search() . Ten porovná řetězec s Regex a vrátí index začátku shody. Jinak vrátí -1. Vrátí pouze první výskyt, takže nemusíte používat příznak „g“ (stejně to nebude fungovat). Použijme předchozí příklad a hledejme pouze devítimístné číslo.

JavaScript:

// String example
var example = “123-956-225, 122563, 246 324 889, 656 2336, 664-484-2332, 123456789”;

// Search for nine-digit string
console.log(example.search(/\b\d{9}\b/));

// result – 58

Použijme první příklad s fiktivním textem a hledejme „střecha“ pomocí search() metoda. Nezapomeňte, že výsledkem bude pouze index prvního výskytu bez ohledu na to, kolik shod (2) je v řetězci.

JavaScript:

var example.search(/roof/);
console.log(example);

// result – 137

nahradit()

Další metoda v řetězci objekt můžete použít s Regex is replace() . Tato metoda vyžaduje dva parametry. Prvním je vzor, ​​který hledáte, a druhým je jeho náhrada. Co takhle nahradit každé pětipísmenné slovo číslem pět?

JavaScript:

var result = example.replace(/\b\w{5}\b/g, “5”);
console.log(result);

// result – try it yourself ...

rozdělit()

Poslední metodou je split() . Tato metoda vezme řetězec, rozřeže ho na jednotlivé kousky podle shod a vrátí pole. Nejjednodušším příkladem může být rozdělení textu na jednotlivá slova. Stejně jako u search() metodu, kterou nemusíte zahrnout příznak „g“. Automaticky projde celým řetězcem.

JavaScript:

// example
var example = “Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.”

// Pattern – with whitespace
var result1 = example.split(/ /);

// Pattern – with token for whitespace
var result2 = example.split(/\s/);

K vyříznutí řetězce můžete použít také písmena, číslice nebo slova, ale nezapomeňte, že všechny znaky, které ve vzoru použijete, budou vyříznuty (nezahrnuty ve výsledku).

JavaScript:

// Variable with example text
var example = “This might not be a good idea.”;

// Splitting
var result = example.split(/o/);

console.log(result);
// result - [“This might n”, “t be a g”, “”, “d idea.”]

A to je pro dnešek vše. Doufám, že tento krátký a rychlý úvod k regulárnímu výrazu byl pro vás užitečný a že se vám líbil. Pokud se vám to líbilo, sdílejte prosím tento příspěvek, aby se ostatní lidé mohli učit a těžit z Regex také.