Jak globalnie zamienić ukośnik w ciągu JavaScript?

130

Jak globalnie zamienić ukośnik w ciągu JavaScript?

Babiker
źródło

Odpowiedzi:

256

Poniższe rozwiązanie wystarczy, ale zastąpi tylko jedno wystąpienie:

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

W przypadku globalnej zamiany lub jeśli wolisz wyrażenia regularne, wystarczy, że unikniesz ukośnika:

"string".replace(/\//g, 'ForwardSlash');
Seldaek
źródło
3
Pierwszy fragment kodu nie zastępuje globalnej. Nie jestem pewien, jak wykonać globalną zamianę w sposób inny niż wyrażenia regularne.
BoltClock
Ach tak, nie próbowałem tego z czymś więcej niż ukośnikiem. Można to zrobić, "string".replace('/', 'ForwardSlash', 'g')ale jest to niestandardowy argument, który działa tylko w Firefoksie afaik.
Seldaek
1
"string".replace(/\//g, 'ForwardSlash');działa, ale usuwa / g z tego i nie działa.
johntrepreneur
1
@johntrepreneur g oznacza, że ​​jest to globalna zamiana, tj. zastępuje wszystkie wystąpienia dopasowanego /. Bez g zastępuje tylko jedną instancję. A jeśli usuniesz /g, całkowicie złamiesz wyrażenie regularne, ponieważ ostatnie / jest ogranicznikiem końca.
Seldaek
1
@RameshRajendran po prostu taki jest interfejs API ... domyślnie zastępuje tylko raz, a następnie zatrzymuje się, gdy znajdzie taki do zastąpienia. Zobacz także developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Seldaek
27

Użyj literału wyrażenia regularnego z gmodyfikatorem i unikaj ukośnika w przód z ukośnikiem odwrotnym, aby nie kolidował z ogranicznikami.

var str = 'some // slashes', replacement = '';
var replaced = str.replace(/\//g, replacement);
BoltClock
źródło
7

Bez użycia wyrażenia regularnego (chociaż zrobiłbym to tylko wtedy, gdy ciąg wyszukiwania jest wprowadzony przez użytkownika):

var str = 'Hello/ world/ this has two slashes!';
alert(str.split('/').join(',')); // alerts 'Hello, world, this has two slashes!' 
Proszę wstać
źródło
4

Czy to jest to, czego chcesz?

'string with / in it'.replace(/\//g, '\\');
Cykuta
źródło
4

To zadziałało dla mnie, zmieniając się "//"w sprawiedliwego "/".

str.replace(/\/\//g, '/');
Marty
źródło
2

Musisz zawinąć ukośnik, aby uniknąć problemów z przeglądarkami lub // komentowania.

str = 'this/that and/if';

var newstr = str.replace(/[/]/g, 'ForwardSlash');
Baz
źródło
1

Cześć mała poprawka w powyższym skrypcie .. powyższy skrypt pomijający pierwszy znak podczas wyświetlania wyjścia.

function stripSlashes(x)
{
var y = "";
for(i = 0; i < x.length; i++)
{
    if(x.charAt(i) == "/")
    {
        y += "";
    }
    else
    {
        y+= x.charAt(i);
    }
}
return y;   
}
Vinay
źródło
0
var str = '/questions'; // input: "/questions"
while(str.indexOf('/') != -1){
   str = str.replace('/', 'http://stackoverflow.com/');
}
alert(str); // output: "http://stackoverflow.com/questions"

Proponowane wyrażenie regularne /\//gnie działa dla mnie; reszta linii ( //g, replacement);) została zakomentowana.

Christophera Lincolna
źródło
1
Należy pamiętać, że nie jestem pewien, jak wydajność tego porównuje proponowane rozwiązanie podziału / łączenia macierzy.
Christopher Lincoln
... natknąłem się na to ... wypróbuj inne IDE, używając inteligentniejszego podświetlania składni. Nie polegaj na kolorach swojego edytora kodu, ale wierz w moc stanowych parserów, które poprawnie tokenizują kod w czasie wykonywania.
soletan
0

To jest pomysł Christophera Lincolna, ale z poprawnym kodem:

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;
}

Przykładowe zastosowanie:

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

Globalna zamiana ciągu znaków w JavaScript jest niepotrzebnie skomplikowana. Ta funkcja rozwiązuje ten problem. Prawdopodobnie ma to niewielki wpływ na wydajność, ale jestem pewien, że jest on pomijalny.

Oto alternatywna funkcja, wygląda znacznie czyściej, ale jest średnio o około 25 do 20 procent wolniejsza niż powyższa funkcja:

function replace(str,find,replace){
    if (find !== ""){
        str = str.toString().split(find).join(replace);
    }
    return str;
}
Jeff Luyet
źródło
-1

Możesz utworzyć RegExpobiekt, aby był bardziej czytelny

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

Jeśli chcesz zastąpić je wszystkie, dodaj "g"flagę

str.replace(new RegExp('/', 'g'), 'foobar');
rioV8
źródło