Làm cách nào để thay thế toàn bộ dấu gạch chéo trong chuỗi JavaScript?


129

Làm cách nào để thay thế toàn bộ dấu gạch chéo trong chuỗi JavaScript?

Câu trả lời:


255

Sau đây sẽ làm nhưng chỉ thay thế một lần xuất hiện:

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

Để thay thế toàn cục hoặc nếu bạn thích các biểu thức thông thường, bạn chỉ cần thoát dấu gạch chéo:

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

3
Đoạn đầu tiên không làm thay thế toàn cầu. Không quá chắc chắn làm thế nào để thay thế toàn cầu theo cách không regex.
BoltClock

À đúng rồi, tôi đã không thử nó với nhiều hơn một dấu gạch chéo. Nó có thể được thực hiện với "string".replace('/', 'ForwardSlash', 'g')nhưng đó là đối số không chuẩn chỉ hoạt động trong Firefox afaik.
Seldaek

1
"string".replace(/\//g, 'ForwardSlash');hoạt động nhưng loại bỏ / g khỏi cái này và nó không hoạt động.
johnt doanh nhân

1
@johnt doanh nhân g chỉ ra đó là sự thay thế toàn cầu, tức là nó thay thế tất cả các phiên bản khớp /. Không có g, nó chỉ thay thế một thể hiện. Và nếu bạn loại bỏ, /gbạn phá vỡ hoàn toàn regex vì cuối cùng / là dấu phân cách cuối.
Seldaek

1
@RameshRajendran đó chỉ là cách API .. theo mặc định, nó chỉ thay thế một lần rồi dừng khi tìm thấy một cái để thay thế. Xem thêm developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/
mẹo

27

Sử dụng một regex nghĩa đen với công cụ gsửa đổi và thoát dấu gạch chéo về phía trước bằng dấu gạch chéo ngược để nó không xung đột với các dấu phân cách.

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

7

Không sử dụng regex (mặc dù tôi sẽ chỉ làm điều này nếu chuỗi tìm kiếm là đầu vào của người dùng):

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

4

Đây có phải là những gì bạn muốn?

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

4

Điều này đã làm việc cho tôi trong việc biến "//"thành chỉ "/".

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

2

Bạn cần bọc dấu gạch chéo về phía trước để tránh các vấn đề về trình duyệt chéo hoặc // bình luận.

str = 'this/that and/if';

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

1

Xin chào một chỉnh sửa nhỏ trong tập lệnh trên .. tập lệnh trên bỏ qua ký tự đầu tiên khi hiển thị đầu ra.

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"

Regex đề xuất /\//gkhông làm việc cho tôi; phần còn lại của dòng ( //g, replacement);) đã được nhận xét.


1
Xin lưu ý rằng tôi không chắc chắn hiệu suất của việc này so sánh giải pháp chia / nối mảng được đề xuất như thế nào.
Christopher Lincoln

... vấp phải điều này ... hãy thử IDE khác bằng cách sử dụng tô sáng cú pháp thông minh hơn. Đừng dựa vào màu sắc của trình soạn thảo mã của bạn, nhưng hãy tin vào sức mạnh của các trình phân tích cú pháp trạng thái, mã hóa chính xác mã của bạn khi chạy.
soletan

0

Đây là ý tưởng của Christopher Lincolns nhưng với mã chính xác:

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

Cách sử dụng ví dụ:

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

Thay thế chuỗi toàn cầu Javascript là phức tạp không cần thiết. Hàm này giải quyết vấn đề đó. Có thể có một tác động hiệu suất nhỏ, nhưng tôi chắc chắn rằng nó không đáng kể.

Đây là một chức năng thay thế , trông sạch sẽ hơn nhiều, nhưng trung bình chậm hơn khoảng 25 đến 20 phần trăm so với chức năng trên:

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

-1

Bạn có thể tạo một RegExpđối tượng để làm cho nó dễ đọc hơn một chút

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

Nếu bạn muốn thay thế tất cả chúng hãy thêm "g"cờ

str.replace(new RegExp('/', 'g'), 'foobar');
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.