Przewodnik po języku JavaScript 1.5:Praca z wyrażeniami regularnymi:Przykłady wyrażeń regularnych
z Mozilla Developer Center, polskiego centrum programistów Mozilli.
[edytuj] Przykłady
Poniższe przykłady prezentują niektóre użycia wyrażeń regularnych.
[edytuj] Zmiana kolejności w łańcuchu znaków wejścia
Następujący przykład ilustruje tworzenie wyrażeń regularnych i użycie string.split() i string.replace(). Czyści on bezwzględnie wejściowy łańcuch znaków zawierający imiona (pierwsze imię jest pierwsze) oddzielone odstępem, tabulatorem i dokładnie jednym średnikiem. Na koniec odwraca on kolejność imion (ostatnie imię jest pierwsze) i sortuje listę.
<script type="text/javascript">
// Łańcuch znaków z imionami zawiera wiele spacji i tabulatorów,
// może również zawierać wiele spacji pomiędzy pierwszym a ostatnim imieniem.
var imiona = "Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ; Chris Hand ";
var output = new Array(
"---------- Oryginalny łańcuch znaków<br><br>",
imiona + "<br><br>");
// Przygotuj dwa wzorce wyrażeń regularnych i tablicę do przechowywania.
// Podziel łańcuch na elementy tablicy.
// wzorzec: możliwe białe znaki, następnie średnik, potem znów możliwe białe
var wzor = /\s*;\s*/;
// Rozbij łańcuch znaków na części oddzielone przez powyższy wzorzec
// i przechowaj je w tablicy o nazwie listaImion
var listaImion = imiona.split(wzor);
// Nowy wzorzec: jeden lub więcej znaków, następnie spacje, następnie znów znaki.
// Użyj nawiasów, by "zapamiętać" porcje wzorca.
// Zapamiętane porcje przydadzą się później.
var wzor = /(\w+)\s+(\w+)/;
// Nowa tablica do przechowywania przetwarzanych imion.
var ListaWgNazwisk = new Array();
// Wyświetl nazwę tablicy i wypełnij nową tablicę
// imionami oddzielonymi za pomocą przecinka, zaczynając od ostatniego.
//
// Metoda "zamien" usuwa wszystko pasujące do wzorca
// i zamienia to z zapamiętanymi porcjami.
//
// Zmienne $1 i $2 odwołują się do zapamiętanych porcji
// podczas porównywania wzorca.
output.push("---------- Po rozdzieleniu przez wyrażenie regularne<BR>");
var i, len;
for (i = 0, len = listaImion.length; i < len; i++)
{
output.push(nameList[i] + "<br>");
ListaWgNazwisk[i] = listaImion[i].replace(wzor, "$2, $1")
}
// Wyświetl nową tablicę.
output.push("---------- Odwrócone imiona<br>");
for (i = 0, len = ListaWgNazwisk.length; i < len; i++)
{
output.push(ListaWgNazwisk[i] + "<br>")
}
// Sortuj według ostatniego imienia, następnie wyświetl posortowaną tablicę.
ListaWgNazwisk.sort();
output.push("---------- Posortowano<br>");
for (i = 0, len = ListaWgNazwisk.length; i < len; i++)
{
output.push(ListaWgNazwisk[i] + "<br>")
}
output.push("---------- Koniec<br>");
document.write(output.join("\n"));
</script>
[edytuj] Używanie specjalnych znaków do sprawdzenia wejścia
W następującym przykładzie, użytkownik wprowadza numer telefonu. Gdy użytkownik naciśnie klawisz Enter, skrypt sprawdzi poprawność numeru. Jeśli numer jest poprawny (pasuje do sekwencji znaków określonej przez wyrażenie regularne), skrypt wywoła okno z podziękowaniem użytkownikowi i zatwierdza numer. Jeśli numer nie jest poprawny, skrypt wywoła okno informacji o nieprawidłowym numerze telefonu.
Wyrażenie regularne szuka zera lub jednego nawiasu otwartego \(?, po którym następują trzy cyfry \d{3}, następnie znów zero lub jeden nawias zamknięty \)?, potem jednego myślnika, ukośnika lub znaku dziesiętnego, a gdy je znajdzie zapamiętuje znaki ([-\/\.]), następujące po nich trzy cyfry i ciąg składający się z myślnika, ukośnika lub znaku dziesiętnego \1 i następujących potem czterech cyfr \d{4}.
Zdarzenie Change zostaje aktywowane, kiedy użytkownik naciśnie klawisz Enter ustawiając wartość RegExp.input.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-2">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<script type="text/javascript">
var re = /\(?\d{3}\)?([-\/\.])\d{3}\1\d{4}/;
function testInfo(phoneInput)
{
var OK = re.exec(phoneInput.value);
if (!OK)
{
window.alert(RegExp.input + " nie jest wprowadzony numerem kierunkowy!");
}
else
{
window.alert("Dziękuję, Twój numer telefonu to " + OK[0]);
}
}
</script>
</head>
<body>
<p>Wprowadź numer telefonu (z numerem kierunkowym), a następnie naciśnij klawisz Enter.</p>
<form action="">
<input name="phone" onchange="testInfo(this);">
</form>
</body>
</html>