Chcę użyć str_replace
lub podobnej alternatywy, aby zamienić tekst w JavaScript.
var text = "this is some sample text that i want to replace";
var new_text = replace_in_javascript("want", "dont want", text);
document.write("new_text");
powinien dać
this is some sample text that i dont want to replace
Jeśli zamierzasz używać wyrażeń regularnych, jakie są implikacje wydajności w porównaniu z wbudowanymi metodami zastępującymi.
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.Odpowiedzi:
Użycie wyrażenia regularnego do zamiany łańcucha jest znacznie wolniejsze niż użycie zamiany łańcucha.
Jak pokazano w JSPerf , możesz mieć różne poziomy wydajności tworzenia wyrażenia regularnego, ale wszystkie z nich są znacznie wolniejsze niż proste zastępowanie ciągów. Wyrażenie regularne jest wolniejsze, ponieważ :
Aby przeprowadzić prosty test na stronie perf JS, udokumentowałem niektóre wyniki:
Wyniki dla przeglądarki Chrome 68 są następujące:
Ze względu na kompletność tej odpowiedzi (zapożyczając z komentarzy) warto wspomnieć, że
.replace
zastępuje tylko pierwsze wystąpienie dopasowanego znaku. Możliwe jest jedynie zastąpienie wszystkich instancji//g
. Można argumentować, że kompromis między wydajnością i elegancją kodu jest gorszy, jeśli zastępuje się wiele wystąpieńname.replace(' ', '_').replace(' ', '_').replace(' ', '_');
lub gorzejwhile (name.includes(' ')) { name = name.replace(' ', '_') }
źródło
.replace
zastępuje tylko pierwsze wystąpienie dopasowanego znaku. Możliwe jest jedynie zastąpienie wszystkich instancji//g
. Można argumentować, że kompromis wydajnościowy będzie gorszy, jeśli zastąpi się wiele instancji,name.replace(' ', '_').replace(' ', '_').replace(' ', '_');
lub gorzejwhile (name.includes(' ')) { name = name.replace(' ', '_') }
Użyłbyś
replace
metody:Oczywiście pierwszy argument dotyczy tego, czego szukasz. Może również akceptować wyrażenia regularne.
Pamiętaj tylko, że nie zmienia to oryginalnego ciągu. Zwraca tylko nową wartość.
źródło
Prościej:
Zastępuje wszystkie spacje znakiem „_”!
źródło
.replace(/\\x3B/g,';')
Wszystkie te metody nie modyfikują oryginalnej wartości, zwracają nowe ciągi.
Zastępuje pierwszą spację _
Zamienia wszystkie spacje na _ używając wyrażenia regularnego. Jeśli potrzebujesz użyć wyrażenia regularnego, polecam przetestowanie go na https://regex101.com/
Zastępuje wszystkie spacje znakiem _ bez wyrażenia regularnego . Funkcjonalny sposób.
źródło
Powinieneś napisać coś takiego:
źródło
Kod, który dają ci inni, zastępuje tylko jedno wystąpienie, podczas gdy użycie wyrażeń regularnych zastępuje je wszystkie (jak powiedział @sorgit). Aby zamienić wszystkie „chcę” na „nie chcę”, użyj tego kodu:
Zmienna „nowy_tekst” spowoduje wyświetlenie „to jest przykładowy tekst, którego nie chcę zastępować”.
Aby uzyskać krótki przewodnik po wyrażeniach regularnych, przejdź tutaj:
http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/
Aby dowiedzieć się więcej
str.replace()
, przejdź tutaj:https://developer.mozilla.org/ pl-PL / docs / JavaScript / Reference / Global_Objects / String / replace
Powodzenia!
źródło
Niekoniecznie. zobacz odpowiedź Hansa Kestinga:
źródło
hm .. Czy sprawdziłeś replace ()?
Twój kod będzie wyglądał następująco
źródło
źródło
W JavaScript wywołujesz
replace
metodę na obiekcie String, np."this is some sample text that i want to replace".replace("want", "dont want")
Który zwróci zastąpiony ciąg.źródło
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ładreplace()
metody mającej oba argumenty łańcuchowe pokazano poniżej.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ąpieniaone
w powyższym przykładzie.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ę nai
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,
Możesz mieć większą kontrolę nad tekstem zastępczym, używając funkcji jako drugiego argumentu.
źródło
Możesz użyć
I zmienić wiele wartości w jednym ciągu na raz, na przykład zmienić # na ciąg v i _ na ciąg w:
źródło
Jeśli naprawdę chcesz mieć odpowiednik PHP,
str_replace
możesz użyć Locutus . Wersja PHPstr_replace
obsługuje więcej opcji niż ta, którąString.prototype.replace
obsługuje JavaScript . Na przykład tagi:lub tablice
Również to nie używa wyrażenia regularnego zamiast pętli. Jeśli nie chcesz używać wyrażenia regularnego, ale chcesz prostego zastąpienia ciągu, możesz użyć czegoś takiego (w oparciu o Locutus)
aby uzyskać więcej informacji, zobacz kod źródłowy https://github.com/kvz/locutus/blob/master/src/php/strings/str_replace.js
źródło
Istnieje już wiele odpowiedzi za pomocą str.replace () (co jest wystarczające w przypadku tego pytania),
regex
ale możesz użyć kombinacji str.split () i join () razem, co jest szybsze niżstr.replace()
iregex
.Poniżej działający przykład:
źródło
Masz następujące możliwości:
Więcej informacji -> tutaj
źródło
W Javascript, funkcja zamień dostępną do zamiany podłańcucha z danego ciągu na nowy. Posługiwać się:
Z tą funkcją możesz nawet użyć wyrażenia regularnego. Na przykład, jeśli chcesz zastąpić wszystkie wystąpienia
,
z.
.Tutaj
g
modyfikator używany do globalnego dopasowania wszystkich dostępnych meczów.źródło
Sposób
replace substring in a sentence
użycia Reacta:RunMethodHere
źródło
Jeśli nie chcesz używać wyrażenia regularnego, możesz użyć tej funkcji, która zamieni wszystko w ciągu
Kod źródłowy:
Jak używać:
źródło
Użyj
String.prototype.replace
pierwszego argumentu JS, który powinien być wzorem Regex lub String, a drugi argument powinien być ciągiem lub funkcją.str.replace(regexp|substr, newSubStr|function);
Dawny:
var str = 'this is some sample text that i want to replace'; var newstr = str.replace(/want/i, "dont't want"); document.write(newstr); // this is some sample text that i don't want to replace
źródło
Nie potrzebujesz dodatkowych bibliotek.
źródło
Dodano metodę,
replace_in_javascript
która spełni Twoje wymagania. Odkryto również, że piszesz łańcuch,"new_text"
wdocument.write()
którym ma się odnosić do zmiennejnew_text
.źródło