Leerzeichen durch Unterstriche in JavaScript ersetzen?

353

Ich versuche, diesen Code zu verwenden, um Leerzeichen durch _ zu ersetzen. Er funktioniert für das erste Leerzeichen in der Zeichenfolge, aber alle anderen Instanzen von Leerzeichen bleiben unverändert. Weiß jemand warum?

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

Antworten:

694

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

Bearbeiten : oder.split(' ').join('_') wenn Sie eine Abneigung gegen REs haben

Edit : John Resig sagte :

Wenn Sie eine Zeichenfolge mit einer statischen Suche und einer statischen Ersetzung suchen und ersetzen, ist es schneller, die Aktion mit .split ("match"). Join ("replace") auszuführen - was kontraintuitiv erscheint, aber funktioniert auf diese Weise in den meisten modernen Browsern. (Es werden Änderungen vorgenommen, um die Leistung von .replace (/ match / g, "replace") in der nächsten Version von Firefox erheblich zu verbessern. Die vorherige Anweisung wird also nicht lange der Fall sein.)

Halbmond frisch
quelle
1
Gibt es eine Möglichkeit, dies ohne den regulären Ausdruck zu tun?
Klicken Sie auf Upvote
14
.split ('') .join ('_')
Crescent Fresh
7
Anstelle von / /gVerwendung /\ /g- beide arbeiten in Javascript. Letzteres funktioniert auch in CoffeeScript.
Tom Leys
27
Ab 2015 ist .replace(/ /g,"_");schneller als .split(' ').join('_').
Gabriel Tomitsuka
8
Zukünftige Leute, die dieses @Inez durchsuchen, haben einen Link, um beide Geschwindigkeiten von Split / Join VS zu testen. ersetzen. Ab Ende 2018 ist der Austausch deutlich schneller.
Ricks
62

Versuche dies:

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

das wird ein globales Suchen / Ersetzen tun

Javascript ersetzen

Adam
quelle
58

Um Prasannas Frage unten zu beantworten:

Wie können Sie in Javascript mehrere Leerzeichen durch einzelne Leerzeichen ersetzen?

Sie würden dieselbe Funktion replacemit einem anderen regulären Ausdruck verwenden. Der Ausdruck für Leerzeichen ist \sund der Ausdruck für "1 oder mehr Mal" ist +das Pluszeichen. Sie würden also nur Adams Antwort durch Folgendes ersetzen:

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

Sie können dies versuchen

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

Es werden sogar mehrere Leerzeichen durch ein einzelnes '-' ersetzt.

Fizer Khan
quelle
3
Wahrscheinlich bemerkenswert: Dadurch werden auch Tabulatoren und andere Leerzeichen entfernt.
Berry M.
18

Ich habe dafür einen JS-Leistungstest erstellt: http://jsperf.com/split-and-join-vs-replace2

Inez
quelle
1
es scheint heutzutage zu ersetzen ist die bessere Wahl insgesamt
Houman
Kave - was? Obwohl nicht alle Browser gleich sind, ist Split / Join im Durchschnitt viel besser. Tatsächlich ist es in vielen modernen Browsern ein besserer Ton! Vielen Dank an Inez für die Einrichtung!
David Hobs
4
Etwas mehr als ein Jahr später liefert das Ausführen des obigen Tests in Chrome 32.0.1700.107 .. str.replace () weitaus bessere Ergebnisse (64% schneller)
jenovachild
12

Leerzeichen durch Unterstrich ersetzen

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

Ausgabe: How_are_you

Arshid KV
quelle
3

Ich weiß, dass dies alt ist, aber ich habe niemanden gesehen, der die Erweiterung des Strings erwähnt hat 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.
};
Blaue Augen weißer Drache
quelle
1
Sie haben niemanden gesehen, der das getan hat, da es eine schreckliche Idee ist. Schauen Sie sich diese andere SO-Frage an, um mehr zu erfahren.
2

Nur mit replace:

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

Vibhu Kumar
quelle
3
Dies wird nur das erste Leerzeichen ersetzen, nicht danach
Narendra