Przejdź do głównej treści
eLearner.app
Moduł 1 · Lekcja 4 z 44/32 w kursie~10 min
Lekcje modułu (4/4)

Znak ucieczki dla metaznaków

Niektóre znaki w wyrażeniach regularnych mają specjalne znaczenie: nazywane są metaznakami. Jeśli chcesz dopasować dosłowny znak (np. prawdziwą kropkę ., prawdziwy plus +, prawdziwy nawias), musisz poprzedzić go ukośnikiem wstecznym (backslashem) \, co go escapuje (maskuje).

Metaznaków do zapamiętania jest dwanaście:

Code
.  *  +  ?  ^  $  |  \  (  )  [  ]  {  }  /

(Znak / nie jest w rzeczywistości metaznakiem silnika wyrażeń regularnych, ale musi być escapowany w dosłownym zapisie JavaScript /.../.)

Code
Pattern: \$\d+\.\d\d
Sample:  Prezzi: $9.99, $12.50, totale $22.49.
                 ^^^^^  ^^^^^^         ^^^^^^

Tutaj escapujemy znak $ (kotwica końca ciągu znaków) oraz . (znak wieloznaczny), aby dopasować dosłowne znaki w formacie ceny "dolar + liczba + kropka + dwie cyfry".

Podwójny backslash w ciągach znaków JS

Kiedy piszesz wzorzec wewnątrz ciągu znaków JavaScript (tak jak robisz to w naszych ćwiczeniach), backslash musi być podwojony. Ciąg znaków JS '\\d' zawiera dwa znaki (\ i d) i odpowiada dokładnie wzorcowi wyrażenia regularnego \d.

JS
const re1 = /\d+/; // zapis dosłowny: pojedynczy backslash
const re2 = new RegExp('\\d+'); // ciąg znaków: podwójny backslash

Edytor kursu pokazuje wzorzec już zdekodowany (widzisz pojedynczy \d); nie musisz samodzielnie niczego podwajać.

12 specjalnych metaznaków

Znakami o specjalnym znaczeniu w silniku są dokładnie: \\ ^ $ . | ? * + ( ) [ {. Jeśli chcesz dopasować je jako dosłowny tekst, musisz poprzedzić je backslashem. W niektórych środowiskach (np. w zwykłych ciągach znaków JS) konieczne może być podwojenie backslasha (\\\\).

Spróbuj sam

Ćwiczenie#regex.m1.l4.e1
Próby: 0Ładowanie...

Znajdź każdą cenę w formacie `$N.NN` (dolar, jedna lub więcej cyfr, kropka, dwie cyfry). Pamiętaj o escapowaniu `$` i `.`.

Ładowanie edytora...
Pokaż wskazówkę

$ musi być escapowany jako \$, kropka jako \. - w przeciwnym razie kropka dopasuje dowolny znak.

Rozwiązanie dostępne po 3 próbach

Ćwiczenie powtórzeniowe

Ćwiczenie#regex.m1.l4.e2
Próby: 0Ładowanie...

Znajdź każdy dosłowny znak zapytania `?` w tekście. Znak `?` jest metaznakiem: musi być escapowany.

Ładowanie edytora...
Pokaż wskazówkę

Bez escapowania ? byłby kwantyfikatorem (moduł 2). Umieść \ przed nim.

Rozwiązanie dostępne po 3 próbach

Dodatkowe wyzwanie

Ćwiczenie#regex.m1.l4.e3
Próby: 0Ładowanie...

Znajdź wszystkie wystąpienia `.tar.gz` w tekście, upewniając się, że kropki są dopasowywane dosłownie.

Ładowanie edytora...
Pokaż wskazówkę

Wstaw backslash przed każdą kropką, aby ją wyescapować.

Rozwiązanie dostępne po 3 próbach