Remplacer les espaces par des traits de soulignement en JavaScript?

353

J'essaie d'utiliser ce code pour remplacer les espaces par _, cela fonctionne pour le premier espace de la chaîne mais toutes les autres instances d'espaces restent inchangées. Quelqu'un sait pourquoi?

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

Réponses:

694

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

Edit : ou .split(' ').join('_')si vous avez une aversion pour les RE

Edit : John Resig a déclaré :

Si vous recherchez et remplacez une chaîne avec une recherche statique et un remplacement statique, il est plus rapide d'effectuer l'action avec .split ("match"). Join ("replace") - ce qui semble contre-intuitif mais il réussit à fonctionner de cette façon dans la plupart des navigateurs modernes. (Il y a des changements en place pour améliorer considérablement les performances de .replace (/ match / g, "replace") dans la prochaine version de Firefox - donc la déclaration précédente ne sera pas le cas pour longtemps.)

Croissant frais
la source
1
Existe-t-il un moyen de le faire sans l'expression rationnelle?
Cliquez sur Upvote
14
.split ('') .join ('_')
Crescent Fresh
7
Au lieu d' / /gutiliser /\ /g- les deux fonctionnent en Javascript. Ce dernier fonctionne également dans CoffeeScript.
Tom Leys
27
À partir de 2015 est .replace(/ /g,"_");plus rapide que .split(' ').join('_').
Gabriel Tomitsuka
8
Les futures personnes parcourant ce @Inez ont un lien pour tester les deux vitesses de fractionnement / jointure VS. remplacer. À la fin de 2018, le remplacement est beaucoup plus rapide.
ricks
62

essaye ça:

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

qui fera une recherche / remplacement globale

remplacement javascript

Adam
la source
58

Pour répondre à la question de Prasanna ci-dessous:

Comment remplacez-vous plusieurs espaces par un seul espace en Javascript?

Vous utiliseriez la même fonction replaceavec une expression régulière différente. L'expression pour les espaces blancs est \set l'expression pour "1 ou plusieurs fois" est +le signe plus, vous devez donc simplement remplacer la réponse d'Adam par ce qui suit:

key=key.replace(/\s+/g,"_");
Riches
la source
30

Vous pouvez essayer ceci

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

Il remplacera même plusieurs espaces par un seul «-».

Fizer Khan
la source
3
Probablement remarquable: cela supprime également les tabulations des autres espaces.
Berry M.
18

J'ai créé un test de performance JS pour cela http://jsperf.com/split-and-join-vs-replace2

Inez
la source
1
il semble de nos jours remplacer est le meilleur choix global
Houman
Kave - quoi? Bien que tous les navigateurs ne soient pas égaux, le split / join en moyenne est bien meilleur. En fait, dans beaucoup de navigateurs modernes, c'est un ton meilleur! Merci Inez d'avoir mis cela en place!
David Hobs
4
Un peu plus d'un an plus tard maintenant et en exécutant le test ci-dessus dans Chrome 32.0.1700.107 .. str.replace () donne de bien meilleurs résultats (64% plus rapides)
jenovachild
12

Remplacer les espaces par un trait de soulignement

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

Sortie: How_are_you

Arshid KV
la source
3

Je sais que c'est vieux mais je n'ai vu personne mentionner l'extension de la chaîne 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.
};
BlueEyesWhiteDragon
la source
1
Vous n'avez vu personne le faire car c'est une idée terrible. Consultez cette autre question SO pour en savoir plus.
2

En utilisant simplement replace:

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

Vibhu kumar
la source
3
Cela remplacera simplement le premier espace pas après cela
Narendra