Bagaimana cara mengganti slash maju secara global dalam string JavaScript?

130

Bagaimana cara mengganti slash maju secara global dalam string JavaScript?

Babiker
sumber

Jawaban:

256

Berikut ini akan dilakukan tetapi hanya akan menggantikan satu kejadian:

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

Untuk penggantian global, atau jika Anda lebih suka ekspresi reguler, Anda hanya perlu menghindari tebasan:

"string".replace(/\//g, 'ForwardSlash');
Seldaek
sumber
3
Cuplikan pertama tidak melakukan penggantian global. Tidak terlalu yakin bagaimana melakukan penggantian global dengan cara non-regex.
BoltClock
Ah benar, saya tidak mencobanya dengan lebih dari tebasan. Itu bisa dilakukan dengan "string".replace('/', 'ForwardSlash', 'g')tetapi itu adalah argumen non-standar yang hanya berfungsi di Firefox afaik.
Seldaek
1
"string".replace(/\//g, 'ForwardSlash');berfungsi tetapi hapus / g dari ini dan tidak bekerja.
johntrepreneur
1
@ johntrepreneur g menunjukkan itu pengganti global, yaitu menggantikan semua instance yang cocok /. Tanpa g, itu hanya menggantikan satu instance. Dan jika Anda menghapus /gAnda melanggar regex sepenuhnya sejak yang terakhir / adalah pembatas akhir.
Seldaek
1
@RameshRajendran seperti itulah APInya .. secara default menggantikan hanya sekali lalu berhenti ketika menemukan satu untuk menggantikan. Lihat juga developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Seldaek
27

Gunakan regex literal dengan gmodifier, dan lepas dari garis miring ke depan dengan garis miring terbalik sehingga tidak berbenturan dengan pembatas.

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

Tanpa menggunakan regex (meskipun saya hanya akan melakukan ini jika string pencarian adalah input pengguna):

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

Apa ini yang kau inginkan?

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

Ini berhasil bagi saya untuk berubah "//"menjadi adil "/".

str.replace(/\/\//g, '/');
Marty
sumber
2

Anda harus menggunakan garis miring untuk menghindari masalah lintas browser atau / / mengomentari.

str = 'this/that and/if';

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

Hai koreksi kecil dalam skrip di atas .. skrip di atas melewatkan karakter pertama saat menampilkan output.

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
sumber
0
var str = '/questions'; // input: "/questions"
while(str.indexOf('/') != -1){
   str = str.replace('/', 'http://stackoverflow.com/');
}
alert(str); // output: "http://stackoverflow.com/questions"

Regex yang diusulkan /\//gtidak bekerja untuk saya; sisa baris ( //g, replacement);) dikomentari.

Christopher Lincoln
sumber
1
Harap dicatat bahwa saya tidak yakin bagaimana kinerja ini membandingkan solusi split / join array yang diusulkan.
Christopher Lincoln
... menemukan ini ... coba IDE yang berbeda menggunakan penyorotan sintaksis yang lebih cerdas. Jangan mengandalkan warna editor kode Anda, tetapi percaya pada kekuatan parser stateful dengan benar tokenizing kode Anda saat runtime.
soletan
0

Ini adalah ide Christopher Lincolns tetapi dengan kode yang benar:

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

Contoh penggunaan:

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

Penggantian string global Javascript tidak perlu rumit. Fungsi ini memecahkan masalah itu. Mungkin ada dampak kinerja yang kecil, tapi saya yakin itu bisa diabaikan.

Inilah fungsi alternatif , terlihat jauh lebih bersih, tetapi rata-rata sekitar 25 hingga 20 persen lebih lambat daripada fungsi di atas:

function replace(str,find,replace){
    if (find !== ""){
        str = str.toString().split(find).join(replace);
    }
    return str;
}
Jeff Luyet
sumber
-1

Anda dapat membuat RegExpobjek agar lebih mudah dibaca

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

Jika Anda ingin mengganti semuanya, tambahkan "g"bendera

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