JavaScript ma replace()
metodę obiektu String do zastępowania podciągów. Ta metoda może mieć dwa argumenty. Pierwszy argument może być łańcuchem lub wzorcem wyrażenia regularnego (obiekt regExp), a drugi argument może być łańcuchem lub funkcją. Przykład replace()
metody mającej oba argumenty łańcuchowe pokazano poniżej.
var text = 'one, two, three, one, five, one';
var new_text = text.replace('one', 'ten');
console.log(new_text) //ten, two, three, one, five, one
Zwróć uwagę, że jeśli pierwszym argumentem jest łańcuch, tylko pierwsze wystąpienie podciągu jest zastępowane, jak w powyższym przykładzie. Aby zamienić wszystkie wystąpienia podłańcucha, musisz podać wyrażenie regularne z g
flagą (globalną). Jeśli nie podasz flagi globalnej, tylko pierwsze wystąpienie podciągu zostanie zastąpione, nawet jeśli jako pierwszy argument podasz wyrażenie regularne. Zastąpmy więc wszystkie wystąpienia one
w powyższym przykładzie.
var text = 'one, two, three, one, five, one';
var new_text = text.replace(/one/g, 'ten');
console.log(new_text) //ten, two, three, ten, five, ten
Zwróć uwagę, że nie zawijasz wzorca wyrażenia regularnego w cudzysłowy, co spowoduje, że będzie to ciąg znaków, a nie obiekt regExp. Aby dokonać zamiany bez rozróżniania wielkości liter, musisz podać dodatkową flagę, i
która sprawi, że wzorzec nie będzie rozróżniał wielkości liter. W takim przypadku powyższe wyrażenie regularne będzie /one/gi
. Zwróć uwagę na i
flagę dodaną tutaj.
Jeśli drugi argument ma funkcję i jeśli istnieje dopasowanie, funkcja jest przekazywana z trzema argumentami. Argumenty, które pobiera funkcja, to dopasowanie, pozycja dopasowania i oryginalny tekst. Musisz zwrócić, czym to dopasowanie powinno zostać zastąpione. Na przykład,
var text = 'one, two, three, one, five, one';
var new_text = text.replace(/one/g, function(match, pos, text){
return 'ten';
});
console.log(new_text) //ten, two, three, ten, five, ten
Możesz mieć większą kontrolę nad tekstem zastępczym, używając funkcji jako drugiego argumentu.
str_replace
akceptuje również dwie tablice o tej samej długości, w których każdy łańcuch w pierwszej tablicy jest zastępowany ciągiem z drugiej tablicy o tym samym indeksie. Zobacz stackoverflow.com/a/5069776/296430, aby zobaczyć jedyną poprawną funkcję, jaką do tej pory znalazłem, która naśladuje dokładnie to zachowanie w javascript.