Bir JavaScript dizesindeki eğik çizgiyi genel olarak nasıl değiştirebilirim?


131

Bir JavaScript dizesindeki eğik çizgiyi genel olarak nasıl değiştirebilirim?

Yanıtlar:


257

Aşağıdakiler işe yarar, ancak yalnızca bir oluşumun yerini alır:

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

Genel bir değişim için veya normal ifadeleri tercih ediyorsanız, eğik çizgiden kaçmanız gerekir:

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

3
İlk kod parçacığı genel değiştirme yapmaz. Genelde regex olmayan bir şekilde nasıl değiştirileceğinden pek emin değilim.
BoltClock

Ah doğru, eğik çizgiden daha fazlasını denemedim. Bununla yapılabilir, "string".replace('/', 'ForwardSlash', 'g')ancak bu yalnızca Firefox afaik'te çalışan standart dışı bir argümandır.
Seldaek

1
"string".replace(/\//g, 'ForwardSlash');çalışır, ancak / g'yi bundan kaldırın ve çalışmaz.
johntrepreneur

1
@johntrepreneur the g, bunun küresel bir ikame olduğunu gösterir, yani eşleşmenin tüm örneklerini değiştirir /. G olmadan yalnızca bir örneği değiştirir. Ve kaldırırsanız /g, normal ifadeyi son / bitiş sınırlayıcıdan itibaren tamamen kırmış olursunuz.
Seldaek

1
@RameshRajendran bu sadece API'nin olduğu şekildedir .. varsayılan olarak yalnızca bir kez değiştirir ve değiştirilecek birini bulduğunda durur. Ayrıca developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Seldaek

27

gDeğiştiriciyle bir normal ifade kullanın ve eğik çizgiden ayırıcılarla çakışmaması için ters eğik çizgiden kaçının.

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

7

Normal ifade kullanmadan (ancak bunu yalnızca arama dizesi kullanıcı girdisi ise yapardım):

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


4

Bu benim için "//"adil hale gelmek için çalıştı "/".

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

2

Tarayıcılar arası sorunları önlemek veya // yorum yapmaktan kaçınmak için eğik çizgiyi kaydırmanız gerekir.

str = 'this/that and/if';

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

1

Merhaba yukarıdaki komut dosyasında küçük bir düzeltme .. yukarıdaki komut dosyası çıktıyı görüntülerken ilk karakteri atlıyor.

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"

Önerilen normal ifade /\//gbenim için çalışmadı; satırın geri kalanı ( //g, replacement);) yorumlandı.


1
Lütfen bunun performansının önerilen dizi bölme / birleştirme çözümünü karşılaştırdığından emin olmadığımı unutmayın.
Christopher Lincoln

... bunun üzerine tökezledi ... daha akıllı sözdizimi vurgulamasını kullanarak farklı IDE deneyin. Kod düzenleyicinizin renklerine güvenmeyin, ancak durum bilgili ayrıştırıcıların kodunuzu çalışma zamanında düzgün şekilde belirtme gücüne inanın.
soletan

0

Bu Christopher Lincolns fikri ama doğru kodla:

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

Örnek Kullanım:

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

Javascript genel dize değişimi gereksiz yere karmaşıktır. Bu işlev, bu sorunu çözer. Muhtemelen küçük bir performans etkisi vardır, ancak bunun ihmal edilebilir olduğuna eminim.

Bu, alternatif bir işlevdir, çok daha temiz görünür, ancak ortalama olarak yukarıdaki işlevden yaklaşık yüzde 25 ila 20 daha yavaştır:

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

-1

RegExpBiraz daha okunaklı hale getirmek için bir nesne oluşturabilirsiniz

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

Hepsini değiştirmek isterseniz "g"bayrağı ekleyin

str.replace(new RegExp('/', 'g'), 'foobar');
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.