Sostituzione di spazi con caratteri di sottolineatura in JavaScript?


353

Sto cercando di utilizzare questo codice per sostituire gli spazi con _, funziona per il primo spazio nella stringa ma tutte le altre istanze di spazi rimangono invariate. Qualcuno sa perché?

function updateKey()
{
    var key=$("#title").val();
    key=key.replace(" ","_");
    $("#url_key").val(key);
}

Risposte:


694

Provare .replace(/ /g,"_");

Modifica : o .split(' ').join('_')se hai un'avversione per REs

Modifica : John Resig ha detto :

Se stai cercando e sostituendo una stringa con una ricerca statica e una sostituzione statica è più veloce eseguire l'azione con .split ("match"). Join ("sostituisci") - che sembra contro-intuitivo ma riesce a funzionare in questo modo nella maggior parte dei browser moderni. (Ci sono cambiamenti in atto per migliorare notevolmente le prestazioni di .replace (/ match / g, "sostituisci") nella prossima versione di Firefox - quindi la dichiarazione precedente non sarà il caso a lungo.)


1
C'è un modo per farlo senza regexp?
Fai clic su Aggiorna

14
.split ('') .join ('_')
Crescent Fresh

7
Invece di / /gusare /\ /g- entrambi funzionano in Javascript. Quest'ultimo funziona anche in CoffeeScript.
Tom Leys,

27
A partire dal 2015 è .replace(/ /g,"_");più veloce di .split(' ').join('_').
Gabriel Tomitsuka,

8
Le persone future che navigano su questo @Inez ha un link per testare entrambe le velocità di split / join VS. sostituire. A partire dalla fine del 2018 la sostituzione è notevolmente più veloce.
ricks


58

Per rispondere alla domanda di Prasanna di seguito:

Come si sostituiscono più spazi con uno spazio singolo in Javascript?

Utilizzeresti la stessa funzione replacecon un'espressione regolare diversa. L'espressione per gli spazi bianchi è \se l'espressione per "1 o più volte" è +il segno più, quindi sostituiresti la risposta di Adam con il seguente:

key=key.replace(/\s+/g,"_");

30

Puoi provare questo

 var str = 'hello     world  !!';
 str = str.replace(/\s+/g, '-');

Sostituirà anche più spazi con un singolo '-'.


3
Probabilmente degno di nota: questo spoglia anche le schede di altri spazi bianchi.
Berry M.

18

Ho creato il test delle prestazioni JS per questo http://jsperf.com/split-and-join-vs-replace2


1
sembra che al giorno d'oggi sostituire sia la migliore scelta complessiva
Houman,

Kave - cosa? Sebbene non tutti i browser siano uguali, dividere / unire in media è molto meglio. In effetti, in molti browser moderni, è un tono migliore! Grazie Inez per averlo configurato!
David Hobs,

4
Poco più di un anno dopo, eseguendo questo test sopra in Chrome 32.0.1700.107 .. str.replace () produce risultati molto migliori (64% più veloce)
jenovachild,

12

Sostituisci gli spazi con il trattino basso

var str = 'How are you';
var replaced = str.split(' ').join('_');

Uscita: How_are_you


3

So che questo è vecchio ma non ho visto nessuno menzionare l'estensione della stringa prototype.

String.prototype.replaceAll = function(search, replace){
    if(!search || !replace){return this;} //if search entry or replace entry empty return the string
    return this.replace(new RegExp('[' + search + ']', 'g'), replace); //global RegEx search for all instances ("g") of your search entry and replace them all.
};

1
Non hai visto nessuno farlo perché è un'idea terribile. Dai un'occhiata a questa altra domanda SO per ulteriori informazioni.

2

Basta usare replace:

var text = 'Hello World';
    
new_text = text.replace(' ', '_');
    
console.log(new_text);


3
Questo sostituirà il primo spazio non dopo
Narendra il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.