2012-01-24 38 views
5

Xuất phát từ nền PHP, tôi hơi bị hỏng với chức năng str_replace mà bạn có thể chuyển một loạt các mũi kim hoặc 01st.Thay thế các ký tự nhất định trong javascript

tôi vẫn chưa chưa từng thấy như vậy một hàm trong Javascript, nhưng tôi đã cố gắng hoàn thành công việc, altough xấu xí, với mã dưới đây cho thấy:

return myString.replace(" ", "-").replace("&", ",");

Tuy nhiên, như tôi cần phải thay thế các nhân vật nhất định với một nhân vật khác phát triển, tôi chắc chắn rằng có nhiều cách tốt hơn để hoàn thành điều này - cả về hiệu năng và thông minh hơn.

Vì vậy, tôi có thể làm gì để thay thế?

+0

Bạn có thể tạo một hàm, nhưng tôi không biết hàm javascript gốc nào thực hiện. –

+0

'myString.replace (" "," - ")' có thể không làm những gì bạn muốn. '" foo bar baz ".replace (" "," - ") ===" foo-bar baz "'. Thay thế bằng một chuỗi vì mẫu chỉ thay thế lần xuất hiện đầu tiên. –

Trả lời

5

Bạn có thể sử dụng này:

var str = "How are you doing?"; 
    var replace = new Array(" ", "[\?]", "\!", "\%", "\&"); 
    var by = new Array("-", "", "", "", "and"); 
    for (var i=0; i<replace.length; i++) { 
     str = str.replace(new RegExp(replace[i], "g"), by[i]); 
    } 

Đưa đó vào một chức năng:

function str_replace(replace, by, str) { 
    for (var i=0; i<replace.length; i++) { 
     str = str.replace(new RegExp(replace[i], "g"), by[i]); 
    } 
    return str; 
} 

Cách sử dụng ví dụ fiddle: http://jsfiddle.net/rtLKr/

+0

Quấn tất cả các char đơn với '\ [' & ']' - phải không? – Industrial

+0

Vâng nó dựa trên các biểu thức thông thường, vì vậy có hầu hết trong số họ không cần gói và thoát. Tôi thường quá lười biếng để thực sự nghĩ về nó và chỉ cần ném nó vào dùng thử và lỗi trên jsFiddle.net hoặc một cái gì đó. –

2

Nếu nó dễ dàng hơn cho bạn, bạn migh t một cái gì đó ưa thích như thế này;

str.replace(/[ab]/g, function (match, i) { 
    switch (match) { 
     case "a": 
      return "A"; 
     case "b": 
      return "B";  
    } 
})); 

tức là thực hiện cụm từ thông dụng trong thông số 1 chấp nhận tất cả mã thông báo bạn đang tìm kiếm và sau đó thêm chức năng để thay thế.

3

Vẻ đẹp của JavaScript là bạn có thể mở rộng chức năng của các loại cơ sở vì vậy bạn có thể thêm một phương pháp -String bản thân:

// v --> array of finds 
// s --> array of replaces 
String.prototype.replaceAll = function(v, s){ 
    var i , ret = this; 
    for(i=0;i<v.length;i++) 
     ret = ret.replace(v[i], s[i]); 
    return ret; 
} 

và bây giờ sử dụng nó:

alert("a b c d e f".replaceAll(["a", "b"], ["1", "2"])); //replaces a b with 1 2 

Bản trình diễn là here.

2

Đây là kết hợp của một số câu trả lời khác. Tôi chỉ thích điều đó, vì tuyên bố khóa-giá trị của các thay thế

function sanitize(str, replacements) { 
    var find; 
    for(find in replacements) { 
     if(!replacements.hasOwnProperty(find)) continue; 
     str = str.replace(new RegExp(find, 'g'), replacements[find]); 
    } 
    return str; 
} 

var test = "Odds & ends"; 
var replacements = { 
    " ": "-", // replace space with dash 
    "&": "," // replace ampersand with comma 
    // add more pairs here 
}; 

cleanStr = sanitize(str, replacements); 
+0

Tôi thích nó, công việc tốt :) –

Các vấn đề liên quan