Funkcja matchAll() to nowsza wersja funkcji match().
W odróżnieniu od funkcji match() zwraca iterowalny obiekt składający się z tablic zawierających znalezione grupy. Jeżeli nic nie znajdzie, zwracany jest null:
Funkcja split()
Funkcja split() obiektu string służy do podziału tekstu na części. Znakiem podziału może być dowolny tekst, ale i wyrażenie regularne:
Funkcja search()
Funkcja search() dla regexpów zwraca indeks pierwszego wystąpienia podciągu w przeszukiwanym tekście:
Funkcja ta zwraca tylko pierwsze wystąpienie szukanego ciągu. Jeżeli chcemy znaleźć wszystkie wystąpienia, powinniśmy skorzystać z funkcji matchAll
Funkcja replace()
Obiekty typu string posiadają funkcję replace(), która służy do zamiany jednego ciągu na drugi.
Przy jej stosowaniu także możemy używać wyrażeń regularnych:
Gdy w wyrażeniu regularnym zastosujemy grupy, w ciągu na który zamieniamy możemy skorzystać z dodatkowych zapisów:
$&
wstawia cały pasujący fragment
$`
wstawia fragment występujący przed pasującym fragmentem
$'
wstawia fragment występujący po pasującym fragmencie
$n
wstawia fragment z grupy o danym numerze np. $1
$<name>
wstawia fragment z grupy o danej nazwie
$$
wstawia znak dolara
Jako drugi argument tej funkcji możemy podać też funkcję, która przyjmuje kilka parametrów:
match
pasujący fragment tekstu (to samo co w powyższej tabeli $&)
p1, p2, p3, ...pn
kolejne pasujące fragmenty należące do zastosowanych w wyrażeniu grup
offset
offset pasującego fragmentu tekstu. Przykładowo jeżeli badany tekst to abcd, a pasujący fragment to bc, to offset będzie wynosił 1
string
tekst który był badany
groups
Jeżeli dana przeglądarka wspiera wyłapywanie grup z nazwami, parametr ten będzie zawierał obiekt którego kluczami będą nazwy grup, a wartościami pasujące fragmenty
W Ecmascript 2021 wprowadzono też funkcję replaceAll(), która działa całkiem podobnie, natomiast domyślnie zamienia wszystkie znalezione wystąpienia.
Funkcja exec()
Funkcja exec() działa nieco inaczej w zależności od tego, czy użyte wraz z nią wyrażenie regularne ma flagę g czy jej nie ma.
Jeżeli wyrażenie nie ma flagi g, funkcja exec() zwróci po prostu pasujący fragment.
Jeżeli jednak użyjemy flagi g, pierwsze odpalenie exec() zwróci pierwszy pasujący fragment, a dodatkowo pozycja zostanie zapisana w zmiennej regexp.lastIndex. Każde kolejne odpalenie tej funkcji dla tego wyrażenia będzie zwracało kolejne fragmenty rozpoczynając od aktualizowanej właściwości regexp.lastIndex
const txt = "Ala_ma_kota";
console.log(txt.split("_")); ["Ala", "ma", "kota"];
const txt = "Czołg o numerze 102 rusza do akcji i strzela 10 razy";
console.log(txt.split(/[0-9]+/)) //["Czołg o numerze ", " rusza do akcji i strzela ", " razy"]
const text = "ala ala ala";
console.log(text.replace("ala", "ola"); //"ola ala ala"
const text = "Kolorowy kolor nie jest kolorowy?";
const reg = /lor/g
console.log(text.replace(reg, "ral")); //"Koralowy koral nie jest koralowy?"
const reg = /([0-9]{4})-([0-9]{2})-([0-9]{2})/
const text = "2020-10-05";
console.log( text.replace(reg, "Mamy rok $3 miesiąc $2 dzień $1") ); //"Mamy rok 2020 miesiąc 10 dzień 05"
const text = "Super Samson jest fajny.";
const reg = /fajny/;
const textEnhanced = text.replace(reg, match => {
return "super" + match;
});
console.log(textEnhanced); //Super Samson jest super fajny
const text = "Kot jest rudy, kot jest zły. Kot podrapie cię do krwi.";
console.log(text.replace(/kot/i, "pies")); //"pies jest rudy, kot jest zły. Kot podrapie cię do krwi."
console.log(text.replaceAll(/kot/gi, "pies")); //"pies jest rudy, pies jest zły. pies podrapie cię do krwi."
//podobnie do funkcji replace(), także do replaceAll() możemy też przekazać zwykły tekst
console.log("kora kora kora".replace("kora", "pora"); //"pora kora kora"
console.log("kora kora kora".replaceAll("kora", "pora"); //"pora pora pora"