Comment remplacer globalement une barre oblique dans une chaîne JavaScript?


130

Comment remplacer globalement une barre oblique dans une chaîne JavaScript?

Réponses:


256

Ce qui suit ferait mais ne remplacera qu'une occurrence:

"string".replace('/', 'ForwardSlash');

Pour un remplacement global, ou si vous préférez les expressions régulières, il vous suffit d'échapper la barre oblique:

"string".replace(/\//g, 'ForwardSlash');

3
Le premier extrait de code ne fait pas de remplacement global. Je ne sais pas trop comment faire un remplacement global de manière non regex.
BoltClock

Ah oui, je ne l'ai pas essayé avec plus qu'une barre oblique. Cela pourrait être fait avec, "string".replace('/', 'ForwardSlash', 'g')mais c'est un argument non standard qui ne fonctionne que dans Firefox afaik.
Seldaek

1
"string".replace(/\//g, 'ForwardSlash');fonctionne mais supprimez le / g de ceci et cela ne fonctionne pas.
johntrepreneur

1
@johntrepreneur le g indique qu'il s'agit d'un remplacement global, c'est-à-dire qu'il remplace toutes les instances du correspondant /. Sans le g, il ne remplace qu'une seule instance. Et si vous supprimez, /gvous cassez complètement l'expression régulière puisque le dernier / est le délimiteur de fin.
Seldaek

1
@RameshRajendran c'est juste la façon dont l'API est .. par défaut, elle ne remplace qu'une seule fois puis s'arrête lorsqu'elle en trouve une à remplacer. Voir aussi developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Seldaek

27

Utilisez un littéral regex avec le gmodificateur, et échappez la barre oblique avec une barre oblique inverse pour qu'elle n'entre pas en conflit avec les délimiteurs.

var str = 'some // slashes', replacement = '';
var replaced = str.replace(/\//g, replacement);

7

Sans utiliser regex (bien que je ne le ferais que si la chaîne de recherche est une entrée utilisateur):

var str = 'Hello/ world/ this has two slashes!';
alert(str.split('/').join(',')); // alerts 'Hello, world, this has two slashes!' 

4

c'est ce que tu veux?

'string with / in it'.replace(/\//g, '\\');

4

Cela a fonctionné pour moi en devenant "//"juste "/".

str.replace(/\/\//g, '/');

2

Vous devez envelopper la barre oblique pour éviter les problèmes entre navigateurs ou // commenter.

str = 'this/that and/if';

var newstr = str.replace(/[/]/g, 'ForwardSlash');

1

Salut une petite correction dans le script ci-dessus .. script ci-dessus sautant le premier caractère lors de l'affichage de la sortie.

function stripSlashes(x)
{
var y = "";
for(i = 0; i < x.length; i++)
{
    if(x.charAt(i) == "/")
    {
        y += "";
    }
    else
    {
        y+= x.charAt(i);
    }
}
return y;   
}

0
var str = '/questions'; // input: "/questions"
while(str.indexOf('/') != -1){
   str = str.replace('/', 'http://stackoverflow.com/');
}
alert(str); // output: "http://stackoverflow.com/questions"

Le regex proposé /\//gn'a pas fonctionné pour moi; le reste de la ligne ( //g, replacement);) a été commenté.


1
Veuillez noter que je ne suis pas certain de savoir comment les performances de ceci comparent la solution proposée de fractionnement / jointure de tableau.
Christopher Lincoln

... j'ai trébuché dessus ... essayez différents IDE en utilisant une coloration syntaxique plus intelligente. Ne vous fiez pas aux couleurs de votre éditeur de code, mais croyez en la puissance des analyseurs avec état qui tokenisent correctement votre code au moment de l'exécution.
soletan du

0

C'est l'idée de Christopher Lincolns mais avec un code correct:

function replace(str,find,replace){
    if (find != ""){
        str = str.toString();
        var aStr = str.split(find);
        for(var i = 0; i < aStr.length; i++) {
            if (i > 0){
                str = str + replace + aStr[i];
            }else{
                str = aStr[i];
            }
        }
    }
    return str;
}

Exemple d'utilisation:

var somevariable = replace('//\\\/\/sdfas/\/\/\\\////','\/sdf','replacethis\');

Le remplacement global des chaînes Javascript est inutilement compliqué. Cette fonction résout ce problème. Il y a probablement un petit impact sur les performances, mais je suis sûr que c'est négligeable.

Voici une fonction alternative , semble beaucoup plus propre, mais est en moyenne environ 25 à 20% plus lente que la fonction ci-dessus:

function replace(str,find,replace){
    if (find !== ""){
        str = str.toString().split(find).join(replace);
    }
    return str;
}

-1

Vous pouvez créer un RegExpobjet pour le rendre un peu plus lisible

str.replace(new RegExp('/'), 'foobar');

Si vous souhaitez tous les remplacer, ajoutez le "g"drapeau

str.replace(new RegExp('/', 'g'), 'foobar');
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.