Podsumowanie
Obiekt główny
Obiekt regularnego wrażenia (ang. regular expression) zawiera wzór regularnego wyrażenia. Posiada ono właściwości i metody użycia tego wyrażenia regularnego do znalezienia i zamiany dopasowań w ciągach znaków.
W dodatku do właściwości pojedynczego obiektu wyrażenia regularnego, które tworzysz używając funkcji konstruktora RegExp
, predefiniwany obiekt RegExp
posiada własności statyczne, które są ustawione, kiedy jakiekolwiek wyrażenie regularne jest użyte.
Tworzony przez
Odpowiednik tekstowy lub funkcja-konstruktor RegExp
.
Odpowiednik tekstowy jest używany jak poniżej:
/wzór/flagi
Konstruktor jest używany jak poniżej:
new RegExp("wzór"[, "flagi"])
Parametry
-
wzór
- Tekst wyrażenia regularnego.
-
flagi
- Jeśli podane, flagi mogą mieć jakąkolwiek kombinację poniższych wartości:
g
- wyszukiwanie globalne,i
- ignoruje wielkość liter,m
- wyszukiwanie w wielu liniach.
Zauważ, że parametry w formacie tekstowym nie używają cudzysłowu do oznaczenia ciągów znaków, kiedy parametry funkcji konstruktora używają cudzysłów. Tak, więc poniższe wyrażenia tworzą to samo wyrażenie regularne:
/ab+c/i new RegExp("ab+c", "i")
Opis
Podczas użycia funkcji konstruktora, standardowe znaki ucieczki (string escape rule, poprzedzanie znaków specjalnych backslash'’ "\" kiedy użyte w ciągu znaków) są wymagane. Na przykład poniższe dwa przykłady są identyczne:
re = new RegExp("\\w+") re = /\w+/
Znaki specjalne w wyrażeniach regularnych
Znak | Znaczenie |
\ |
Dla znaków które zwykle są traktowane dosłownie, oznacza że następny znak jest specjalny i nie ma być interpretowany standardowo. Na przykład, -lub- Dla znaków, które zwykle są traktowane jako specjalne oznacza, że następny znak jest zwykły powinien być interpretowany dosłownie. Na przykład, |
^ |
Znajduje początek wejścia. Jeśli flaga wielu linii (ang. multiline) jest ustawiona na prawda ( Na przykład, |
$ |
Oznacza koniec wejścia. Jeśli flaga wielu linii (ang. multiline) jest ustawiona na prawda ( Na przykład, |
* |
Znajduje poprzedzającą pozycję 0 lub więcej razy. Na przykład, |
+ |
Znajduje poprzedzającą pozycję 1 lub więcej razy. Równoważne do Na przykład, |
? |
Znajduje poprzedzającą pozycję 0 razy lub 1 raz. Na przykład Jeśli zostanie użyte zaraz po którymś ze znaków *, +, ?, or {}, wymusza sprawdzenie, czy wystąpiła minimalna liczba wystąpień, podczas gdy domyślnie sprawdzana jest maksymalna liczba wystąpień. Pytajnik używany jest także w lookahead assertions, opisanych pod |
. |
(Kropka) znajduje jakikolwiek pojedynczy znak poza znakiem nowej linii. Na przykład, |
(x) |
Znajduje "x" i zapamiętuje to dopasowanie. Nazywa się to "nawiasy wychwytujące" (ang. capturing parentheses). Na przykład, |
(?:x) |
Znajduje "x", ale nie pamięta dopasowania. Nazywa się to "nawiasy niewychwytujące" (ang. non-capturing parentheses). Znaleziony podciąg (substring) nie może być wywołany ponownie z elementów wynikowych tablicy |
x(?=y) |
Znajduje "x", tylko wtedy, gdy zaraz po "x" jest "y". Na przykład, |
x(?!y) |
Znajduje "x", tylko, jeśli po "x" nie ma "y". Na przykład,
|
x|y |
Znajduje "x" lub "y". Na przykład, |
{n} |
Gdzie Na przykład, |
{n,} |
Gdzie Na przykład, |
{n,m} |
Gdzie Na przykład, |
{{ mediawiki.external('xyz') }} |
Zestaw znaków. Wyszukuje jakikolwiek z podanych znaków. Możesz podać przedział znaków używając myślnika. Na przykład, |
{{ mediawiki.external('^xyz') }} |
Przeciwny zestaw znaków. Wyszukuje cokolwiek, co nie jest wewnątrz nawiasów. Podobnie jak powyżej można podać zakres znaków używając myślnika. Na przykład, |
{{ mediawiki.external('\\b') }} |
Wyszukuje znak backspace (nie mylić z |
\b |
Wyszukuje granicę wyrazów (ang. word boundary), jak na przykład spację (nie mylić z Na przykład, |
\B |
Znajduje brak granicy niewyrazu (ang. non-word boundary). Na przykład, |
\cX |
Gdzie Na przykład, |
\d |
Znajduje cyfrę. Odpowiednik Na przykład, |
<code>\D |
Wyszukuje jakikolwiek znak nieliczbowy. Odpowiednik Na przykład, |
\f |
Znajduje znak wysuwu wiersza (form feed). |
\n |
Znajduje znak następnego wiersza (line feed). |
\r |
Znajduje znak powrotu karetki (carriage return). |
\s |
Znajduje pojedynczy biały znak (ang. white space character), wliczając w to spację, tabulator, znak wysuwu wiersza, znak następnego wiersza. Odpowiednik Na przykład, |
\S |
Zaznacza jakikolwiek znak inny niż biały (ang. white space). Odpowiednik Na przykład, |
\t |
Znajduje tabulator. |
\v |
Znajduje pionowy tabulator (ang. vertical tab). |
\w |
Znajduje jakikolwiek znak alfanumeryczny i znak podkreślenia Na przykład, |
\W |
Zaznaczy jakikolwiek znak niewyrazowy. Odpowiednik Na przykład, |
\n |
Gdzie Na przykład, |
\0 |
Wyszukuje znak NUL. Bezpośrednio po |
\xhh |
Znajduje znak o kodzie hh (dwie cyfry szesnastkowe) |
\uhhhh |
Znajduje znak o kodzie hhhh (cztery cyfry szesnastkowe). |
Notacja tekstowa zostaje skompilowana, kiedy wyrażenie regularne jest wykonane. Używaj notacji tekstowej wtedy, kiedy wyrażenie regularne pozostanie niezmienione. Na przykład, jeśli użyjesz notacji tekstowej do konstrukcji wyrażenia regularnego w pętli, wyrażenie to nie zostanie przekompilowane podczas każdej iteracji.
Konstruktor obiektu wyrażenia regularnego, na przykład new RegExp("ab+c")
, pozwala na kompilację podczas czasu wykonywania (ang. runtime compilation) wyrażenia. Używaj funkcji konstruktora, kiedy wiesz, że wzór wyrażenia regularnego będzie się zmieniać lub gdy nie znasz tego wzoru i pobierasz go z innego źródła, jak na przykład wejście użytkownika.
Oddzielny predefiniowany obiekt RegExp
jest dostępny dla każdego okna, to jest każdy oddzielny wątek uruchomienia JavaScriptu dostaje jego własny obiekt RegExp
. Jako że każdy skrypt uruchamiany jest cały w oddzielnym wątku, zapewnia to, iż oddzielne skrypty nie nadpisują wartości obiektu RegExp
.
Własności
Zauważ, że niektóre własności obiektu RegExp
mają dwie nazwy: długą i krótką (Perlową). Obydwie nazwy zawsze odwołują się do tej samej wartości. Perl jest językiem programowania, z którego uformowały się wyrażenia regularne JavaScriptu.
constructor: Określa funkcję, która tworzy prototyp obiektu.
global: Czy przeszukiwać cały ciąg w poszukiwaniu wszystkich możliwych dopasowań czy tylko w poszukiwaniu pierwszego. W JavaScripcie 1.5, własności instancji RegExp
, a nie obiektu.
ignoreCase: Czy ignorować wielkość liter podczas wyszukiwania. W JavaScripcie 1.5, własności instancji RegExp
, a nie obiektu.
lastIndex: Indeks, od którego rozpoczynać następne szukanie. W JavaScripcie 1.5, własności instancji RegExp
, a nie obiektu.
multiline: Czy w ciągach z wieloma liniami, szukać w wielu liniach. W JavaScripcie 1.5, własności instancji RegExp
, a nie obiektu.
prototype: Pozwala na dodanie własności wszystkim obiektom.
source: Tekst wzoru. W JavaScripcie 1.5, własności instancji RegExp
, a nie obiektu.
Metody
exec: Uruchamia wyszukiwanie dopasowania w ciągu podanym poprzez parametr tej metody.
test: Testuje dopasowanie w ciągu podanym poprzez parametr tej metody.
toSource: Zwraca literał obiektu reprezentujący podany obiekt; możesz użyć tej wartości do utworzenia nowego obiektu. Przesłania metodę Object.toSource.
toString: Zwraca ciąg znaków reprezentujący podany obiekt. Przesłania metodę Object.toString.
W dodatku, obiekt ten dziedziczy metody watch i unwatch z Object.
Przykłady
Przykład: Zastosowanie metody replace
Poniższy przykład używa metodę replace
do zamiany wyrazów w ciągu (stringu). Podczas zamiany tekstu, skrypt używa "$1
" i "$2
" do oznaczenia wyników odpowiadających im nawiasów we wzorze wyrażenia regularnego.
var re = /(\w+)\s(\w+)/; var str = "Jan Kowalski"; var newstr = str.replace(re, "$2, $1"); document.write(newstr);
Wyświetli to "Kowalski, Jan".
Przykład: Zastosowanie input
W poniższym przykładzie, RegExp.input
jest ustawiony poprzez zdarzenie (ang. event) Change
. W funkcji getInfo
, metoda exec
używa wartości RegExec.input
jako jej argument.
<script LANGUAGE="JavaScript1.2"> function getInfo(elem) { var re = /(\w+)\s(\d+)/; var m = re.exec(elem.value); window.alert(m[1] + ", twój wiek to " + m[2]); } </script> Podaj swoje imię i twój wiek, następnie wciśnij Enter. <form> <input type="text" name="NameAge" onchange="getInfo(this);"/> </form>