Zamień znaki specjalne w ciągu na _ (podkreślenie)

93

Chcę usunąć znaki specjalne z ciągu i zastąpić je _znakiem.

Na przykład:

string = "img_realtime_tr~ading3$"

Wynikowy ciąg powinien wyglądać jak „img_realtime_tr_ading3_”;

Muszę zamienić te znaki: & / \ # , + ( ) $ ~ % .. ' " : * ? < > { }

user1049997
źródło
48
dlaczego to jest zamknięte, to dobre pytanie. Jak zamienić znaki specjalne, przydatne przy tworzeniu adresów URL przyjaznych dla SE. Na szczęście ktoś na to odpowiedział.
rower
1
Niezwykle wąska sytuacja, która nie ma ogólnego zastosowania do odbiorców internetu na całym świecie? Powiedzmy tylko, że co najmniej 108 osób myśli inaczej.
Antoine Pelletier
1
Zamknięte ? Całkiem przydatne podczas skrobania brudnych danych.
Standaa Przywróć Monikę
To nie powinno być zamknięte
Mustkeem K

Odpowiedzi:

210
string = string.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g,'_');

Alternatywnie, aby zmienić wszystkie znaki z wyjątkiem cyfr i liter, spróbuj:

string = string.replace(/[^a-zA-Z0-9]/g,'_');
Niet the Dark Absol
źródło
Fajne! !brakuje jednak w pierwszym wierszu.
ProblemsOfSumit
4
Druga linia jest bardzo przydatna w wielu sytuacjach.
mastazi
\-a =także brakuje :)
Simo D'lo Mafuxwana
2
Jeśli masz znak specjalny przed spacją, taką jak hello! wordty, otrzymasz dwa podkreślenia następujące po hello__wordsobie, możesz to zrobić:string = string.replace(/[^a-zA-Z0-9]/g,'_').replace(/__/g,'_');
DannyFeliz
3
@DannyFeliz, a nawet string = string.replace(/[^a-zA-Z0-9]/g,'_').replace(/_{2,}/g,'_');jeśli nie wiesz, ile kolejnych podkreślników
falkodev
1
string = string.replace(/[\W_]/g, "_");
Wen
źródło