2011-08-22 28 views
5

Tôi đang cố gắng trao đổi tất cả các lần xuất hiện của một cặp chất nền trong một chuỗi đã cho.Làm cách nào để trao đổi các đoạn trong chuỗi?

Ví dụ: tôi có thể muốn thay thế tất cả các lần xuất hiện của "cà phê" bằng "trà" và tất cả các lần xuất hiện của "trà" bằng "cà phê".

Đây là điều đầu tiên tôi nghĩ đến:

var newString = oldString.replace(/coffee/g, "__").replace(/tea/g, "coffee").replace(/__/g, "tea"); 

Nó hoạt động hầu hết thời gian, nhưng nếu chuỗi đầu vào của tôi chứa chuỗi "__", nó sẽ không hoạt động đúng.

Tôi đang tìm kiếm một cái gì đó mà làm việc bất kể những gì đầu vào tôi cho nó, vì vậy tôi nghĩ một số chi tiết và đến với điều này:

var pieces = oldString.split("coffee"); 
for (var i = 0; i < pieces.length; i++) 
    pieces[i] = pieces[i].replace(/tea/g, "coffee"); 
var newString = pieces.join("tea"); 

Nó hoạt động tốt nhưng nó là loại xấu xí và tiết. Tôi cố gắng để đưa ra một cái gì đó ngắn gọn hơn và tôi đã sử dụng map function xây dựng vào jQuery để đưa ra với điều này:

var newString = $.map(oldString.split("coffee"), function(piece) { 
    return piece.replace(/tea/g, "coffee"); 
}).join("tea"); 

Đó là tốt hơn nhưng tôi vẫn có cảm giác rằng có một số phương pháp rực rỡ đơn giản đó là thất bại trong việc đến với tâm trí tôi. Có ai ở đây biết một cách đơn giản hơn?

Trả lời

6

gì về

theString.replace(/(coffee|tea)/g, function($1) { 
    return $1 === 'coffee' ? 'tea' : 'coffee'; 
}); 

(Cá nhân tôi nghĩ rằng đó là một tội phạm để trao đổi cà phê và trà, nhưng đó là doanh nghiệp của bạn)

0

Đóng. Hãy xem xét điều này:

var newString = oldString.replace("tea|coffee", function(match) { 
    // now return the right one, just a simple conditional will do :) 
}); 

Mã hóa hạnh phúc.

2

Bạn có thể sử dụng một chức năng:

var str = "I like coffee more than I like tea"; 
var newStr = str.replace(/(coffee|tea)/g, function(x) { 
    return x === "coffee" ? "tea" : "coffee"; 
}); 
alert(newStr); 

Running example

0

Sử dụng bản đồ (một đối tượng) để xác định những gì thay thế những gì và sau đó một chức năng để khai thác vào bản đồ:

D:\MiLu\Dev\JavaScript :: type replace.js 
function echo(s) { WScript.Echo(s) } 
var 
map = { coffee: "tea", tea: "coffee" }, 
str = "black tea, green tea, ice tea, teasing peas and coffee beans"; 
echo(str.replace(/\b(tea|coffee)\b/g, function (s) { return map[s] })); 

D:\MiLu\Dev\JavaScript :: cscript replace.js 
black coffee, green coffee, ice coffee, teasing peas and tea beans 
Các vấn đề liên quan