Reemplace los caracteres especiales en una cadena con _ (guión bajo)

93

Quiero eliminar los caracteres especiales de una cadena y reemplazarlos con el _carácter.

Por ejemplo:

string = "img_realtime_tr~ading3$"

La cadena resultante debería verse como "img_realtime_tr_ading3_";

Necesito reemplazar esos caracteres: & / \ # , + ( ) $ ~ % .. ' " : * ? < > { }

usuario1049997
fuente
48
por qué está cerrado, es una buena pregunta. Cómo reemplazar caracteres especiales, útil al crear URL compatibles con SE. Afortunadamente, todavía alguien respondió.
bicicleta
1
¿Una situación extraordinariamente limitada que generalmente no es aplicable a la audiencia mundial de Internet? Bueno, digamos que al menos 108 personas pensaban lo contrario.
Antoine Pelletier
1
Cerrado Sin embargo, bastante útil cuando se raspan datos sucios.
Standaa Reinstate Monica
Esto no debería estar cerrado
Mustkeem K

Respuestas:

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

Alternativamente, para cambiar todos los caracteres excepto números y letras, intente:

string = string.replace(/[^a-zA-Z0-9]/g,'_');
Niet the Dark Absol
fuente
¡Frio! !Sin embargo, falta en la primera línea.
ProblemsOfSumit
4
La segunda línea es muy útil en varias ocasiones.
mastazi
\-y =también falta :)
Simo D'lo Mafuxwana
2
Si tiene un carácter especial antes de un espacio como hello! word, terminará con dos guiones bajos consecutivos como este hello__word, puede hacer esto:string = string.replace(/[^a-zA-Z0-9]/g,'_').replace(/__/g,'_');
DannyFeliz
3
@DannyFeliz o incluso string = string.replace(/[^a-zA-Z0-9]/g,'_').replace(/_{2,}/g,'_');si no sabe cuántos guiones bajos consecutivos
falkodev
1
string = string.replace(/[\W_]/g, "_");
Wen
fuente