Průvodce regulárních výrazů pro začátečníky (Regex)
Regulární výraz je sada znaků tvořících vzor, který lze vyhledávat v řetězci. Lze použít Regex validace čísla kreditních karet, například Vyhledávání tj. prostřednictvím složitých textových shod a pro nahrazení shodného textu s jiným řetězcem. Má také velkou podporu více jazyků - jednou se naučíte a můžete ji používat v mnoha programovacích jazycích.
Viděl jsem pár lidí, kteří se poprvé podívali na regex a úplně ho ignorovali. Neobviňuji je; syntaxe regexu je složitá a bude se množit, stejně jako jazyky příkazového řádku, jen horší. Ale pak je každá nová věc děsivá a zpočátku se zřejmě nedá naučit. Tak si to vypůjčuji Horatiovi. Začněte, buďte odvážní a pustíte se do moudrého myšlení.
O společnosti Regex
Regex měl své kořeny v neurovědě a matematice a byl implementován pouze v programování v roce 1968 Ken Thompsonem v textovém editoru QED pro vyhledávání textu. Nyní je součástí mnoha programovacích jazyků jako Perl, Java, Python, Ruby a JavaScript.
Podívejme se na některé příklady, jak regex funguje.
Budu používat JavaScript v mých příkladech. Chcete-li projít začátečníky, musíte se naučit všechny znaky, třídy, kvantifikátory, modifikátory a metody používané v regexu. Zde je odkaz na stránku regulárních výrazů Mozilla Developer Network, kde si můžete prohlédnout tabulku obsahující všechny tyto. Můžete také odkazovat na cheatsheet na konci tohoto příspěvku s většinou použitých znaků.
Podívejme se na jednoduchý příklad s vysvětlením. Toto je regex.
Toto je to, co bude výše uvedený regex hledat v řádku, znaku 'B', za nímž bude následovat alespoň jeden znak jakéhokoli znaku mezi (a včetně) 'a' až 'z', 'A' až 'Z' a čísla 0 až 9.
Zde je ukázka shody ve zvýrazněném řádku:
Košík, žárovka, B12 vitamín, BaSO4, N před naším letopočtem společnost
Výše uvedený regex zastaví vyhledávání na Košík a vrátit pozitivní odpověď. To je Protože globální modifikátorG
musí být specifikováno pokud chcete, aby se regex podíval na všechny možné zápasy.
Nyní se podívejme, jak používat tento výraz v JavaScriptu. test
Metoda jde: je-li nalezena shoda skutečný
, jiný Nepravdivé
.
var input = "váš testovací řetězec", regex = / B [a-zA-Z d] + /; if (! regex.test (input)) alert ('Nenalezena žádná shoda'); jiný záznam ('A match found');
Zkusme jinou metodu: zápas
vrátí shody nalezené v poli.
var input = "váš testovací řetězec", regex = / B [a-zA-Z d] + / g, / * Přidal jsem globální modifikátor 'g' do regexu, abych získal všechny shody * / ary = input.match (regex); if (ary === null) upozornění ('Nenalezena žádná shoda'); else alert ('odpovídá:' + ary.toString ());
Co takhle řetězec nahradit
? Zkusme to teď s regexem.
var input = "testovací řetězec", regex = / B [a-zA-Z d] + / g; výstraha (input.replace (regex, "#"));
Níže je codepen pro vás vyladit. Kliknutím na kartu "JavaScript" zobrazíte kód JS.
Cvičení
Pro cvičení, můžete google “regex cvičení” a zkuste je vyřešit. Zde je to, co očekávat při pokusech o tyto cvičení, podle úrovně obtížnosti.
Základní
Abych byl schopen ověření hesla je dostačující pro začátek. Proto ověřte heslo pro délku 8 až 16 znaků, alfanumerické s možností volby speciálních znaků.
středně pokročilí
To je místo, kde byste měli cvičit s více reálnými daty a dozvědět se více regex bodů lookahead, lookbehind tvrzení a odpovídající skupiny;
- Ověřte si kódy PIN, hexadecimály, data, ID e-mailu, plovoucí desetinnou čárku.
- Nahraďte koncovou nulu, mezery, sadu odpovídajících slov
- Rozbalte různé části adresy URL
Pokročilý
Můžete optimalizovat výše uvedená cvičení 'řešení - nejoptimálnější regex pro e-mail má tisíce znaků v něm - tak vezměte si to, pokud se budete cítit pohodlně a to je dost. Můžete také vyzkoušet:
- Analyzování HTML nebo XML (eventhough v reálném světě je odradeno, aby tak učinily, protože použití regulárního výrazu k analýze nepravidelného jazyka, jako je HTML, nikdy nezajistí jeho spolehlivost. Plus XML parsování je obtížný úkol, vhodný pro pokročilé uživatele)
- Výměna štítků
- Odstranění komentářů (s výjimkou podmíněných komentářů IE)
Nástroje
Nástroje vizualizovat regex jsou pro mě jedna z nejlepších věcí. Pokud se někdy setkáte s dlouhým komplexním regexem, stačí je zkopírovat do jednoho z těchto nástrojů a budete moci jasně vidět tok. Kromě toho existuje mnoho nástrojů, které můžete použít k překrytí s regex kódem. Oni také předvést příklady a podvádí spolu s vlastnostmi sdílení.
- Debuggex - Nakreslí regex diagram podle vašeho vstupu a můžete se rychle podělit o StackOverflow přímo od něj.
- RegExr - můžete otestovat svůj regex s tímto. To také dostal odkaz, cheatsheet a příklady, které vám pomohou ven.
- Refiddle - V tuto chvíli, kromě JavaScriptu, můžete také ovládat verze regexu Ruby a .NET v něm.
Regex Cheatsheet
Žeton | Definice |
[abc] | Libovolný jednotlivý znak a, b nebo c |
[^ abc] | Jakýkoli jiný znak než a, b nebo c |
[a-z] | Znak mezi (včetně) a až z |
[^ a-z] | Znak kromě a až z |
[A-Z] | Znak mezi (včetně) A až Z |
. | Nějaký jediný znak |
s | Libovolný znak mezery |
S | Žádný znak bez mezer |
d | Libovolná číslice 0 až 9 |
D | Libovolné jiné než číslice |
w | Jakýkoliv znak slova (písmeno, číslo a podtržítko) |
W | Jakýkoli ne-slovní znak |
(…) | Zachyťte všechno uzavřené |
(a | b) | Shoda buď a nebo b |
A? | Znak a je buď nepřítomný, nebo přítomen jednou |
A* | Znak a je buď nepřítomen nebo přítomen vícekrát |
A+ | Znak a je přítomen jednou nebo vícekrát |
a 3 | 3 následky charakteru a postupně |
3, | 3 nebo více výskytů charakteru za sebou |
a 3,6 | 3 až 6 výskytů znaků a postupně |
^ | Začátek řetězce |
$ | Konec řetězce |
b | Hranice slova. Pokud je znak posledním nebo prvním znakem slova nebo je-li znak mezi znakem slova nebo ne-slovem |
B | Hranice bez slov |