Przejdź do treści

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 regularnego
String|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 tekstu
  • String 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 fragment
  • String 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"

Komentarze

Zobacz więcej komentarzy

Facebook