2011-08-22 4 views
5

मैं किसी दिए गए स्ट्रिंग के भीतर सबस्ट्रिंग्स की एक जोड़ी की सभी घटनाओं को स्वैप करने की कोशिश कर रहा हूं।मैं स्ट्रिंग के भीतर सबस्ट्रिंग्स को कैसे स्वैप कर सकता हूं?

उदाहरण के लिए, मैं "कॉफी" की सभी घटनाओं को "चाय" और "कॉफी" के साथ "चाय" की सभी घटनाओं को प्रतिस्थापित करना चाहूंगा।

यह पहली बात मैं के बारे में सोचा है:

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

यह समय के सबसे अधिक काम करता है, लेकिन अगर मेरी इनपुट स्ट्रिंग स्ट्रिंग "__" होता है, यह ठीक से काम नहीं करेगा।

मैं कुछ है कि भले ही मैं यह क्या इनपुट देने के काम करता है के लिए देख रहा हूँ, इसलिए मैं कुछ और सोचा और इस के साथ आया था:

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"); 

यह ठीक काम करता है, लेकिन यह एक तरह से बदसूरत और अत्यधिक शब्द है। मैं अधिक संक्षिप्त कुछ के साथ आने की कोशिश की और मैं map function jQuery में बनाया इस्तेमाल किया यह साथ आने के लिए:

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

यही बेहतर है लेकिन मैं अभी भी एक लग रहा है कुछ शानदार ढंग से सरल विधि है कि करने के लिए विफल हो रहा है है कि वहाँ है मेरे दिमाग में आओ। क्या यहां कोई आसान तरीका जानता है?

उत्तर

6

के बारे में क्या

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

(निजी तौर पर मुझे लगता है कि कॉफी और चाय स्वैप करने के लिए एक अपराध है, लेकिन है कि आपके व्यवसाय है)

0

बंद करें। इस पर विचार करें:

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

हैप्पी कोडिंग।

2

आप एक समारोह का उपयोग कर सकते हैं:

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

परिभाषित करने के लिए एक मानचित्र (एक ऑब्जेक्ट) का उपयोग करें कि क्या और फिर फ़ंक्शन को टैप करने के लिए क्या बदलता है मानचित्र पर:

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 
संबंधित मुद्दे