Zamiana fraz - replace
Co zrobić, aby zamienić w tekście wszystkie wystąpienia podanej frazy na inną?
String.prototype.replace(searchValue, replaceValue)
- Parametry:
String|RegExp
searchValue - szukana wartość w postaci prostego tekstu albo wyrażenia regularnegoString|Function
replaceValue - tekst na który mają zostać zamienione dopasowania albo funkcja zwracająca tekst na podmianę i przyjmująca argumenty:String
substring - dopasowany fragment oryginalnego tekstuString
capture1,String
capture2... - lista części dopasowania, które w wyrażeniu były umieszczone w nawiasach (opcjonalne)Number
offset - pozycja w oryginalnym teście (liczba naturalna licząc od 0), na której znaleziono dopasowany fragmentString
string - oryginalny tekst
- Wartość:
String
- zmieniony tekst
Przeszukuje tekst pod kątem występowania w nim podanego tekstu i zamienia go na inny.
Jeżeli argument searchValue jest wyrażeniem regularnym o dopasowaniu globalnym - z ustawioną flagą g - zamieniane są wszystkie znalezione wystąpienia tekstu. W przeciwnym razie zamieniane jest tylko pierwsze wystąpienie dopasowania.
Jeżeli argument replaceValue jest funkcją, znalezione wystapienia tekstu są zamieniane na wartość, którą ona zwróci. W przeciwnym razie znalezione dopasowania są zamieniane na podany tekst. W takim przypadku niektóre znaki w tym teście mają specjalne znaczenie:
- $$ - znak dolara $
- $& - dopasowany fragment oryginalnego tekstu
- $` - fragment tekstu znajdujący się przed dopasowaniem
- $' - fragment tekstu znajdujący się po dopasowaniu
$n
(n = 1...9
),$nn
(nn = 01...99
) - odpowiednia część dopasowania, która w wyrażeniu była umieszczona w nawiasie o podanym numerze
Dość częstym błędem jest podanie pierwszego argumentu w postaci prostego tekstu albo wyrażenia regularnego bez flagi g i oczekiwanie, że w oryginalnym tekście zostaną zamienione wszystkie wystąpienia poszukiwanej frazy. Przypominam, że jedynym sposobem na wykonanie tego jest użycie wyrażenia regularnego o dopasowaniu globalnym (z ustawioną flagą g).
Przykład String.prototype.replace
"abcd efg abc".replace("abc", "123"); // "123d efg abc" "abcd efg abc".replace(/abc/, "123"); // "123d efg abc" "abcd efg abc".replace(/abc/g, "123"); // "123d efg 123" "ABCd efg abc".replace(/abc/i, "123"); // "123d efg abc" "ABCd efg abc".replace(/abc/ig, "123"); // "123d efg 123" var search = /((a)b)(c)/; var replace = "$$[$`,$&,$',$1-$01,$2-$02,$3-$03]$$"; "123 abc 456".replace(search, replace); // "123 $[123 ,abc, 456,ab-ab,a-a,c-c]$ 456" replace = "[$&,$1,$2,$3]"; "ABC abc".replace(/((a)b)(c)/ig, replace); // "[ABC,AB,A,C] [abc,ab,a,c]" replace = function (substring, capture1, capture2, capture3, offset, string) { return "[" + substring + "," + capture1 + "," + capture2 + "," + capture3 + "," + offset + "," + string + "]"; }; "123 abc 456".replace(search, replace); // "123 [abc,ab,a,c,4,123abc456] 456"