2016-02-22 33 views
1

我想在兩個方向上替換變音符號。我設法在一個方向上替換變音符號。例如,一個字符串應該寫成一個ö(Björn)比oe(Bjoern)。這是我使用的代碼:在兩個方向上替換變音符號

umlauts = {"ä":"ae", "ü":"ue", "ö":"oe"} 

replaceUmlaute = function(s) { 
return s.replace(/[äöüß]/g, function($0) { 
return umlauts[$0] }) 
} 

我怎麼能更改代碼,以使其動態因此變音符會以兩種方式比約恩被替換 - >比約恩或Bjoern->比約恩。 我需要一個函數,它需要一個字符串並檢查變音符號。如果它ö然後切換到oe並且如果它是oe然後切換到ö。謝謝!

+0

爲什麼你不能在其他方向添加鍵到變音變量,並更新你的正則表達式來匹配這些鍵? – driusan

+6

我希望你沒有任何人叫「喬」,「蘇」或「凱」。 –

+0

@driusan我試過這個,但它似乎沒有工作。 – clde

回答

4

使用一個功能是雙向的

var str = "Bjoern, Joern, und ein Schloss am Woerthersee, Suess, Bjoern, Joern, und ein Schloss am Woerthersee, Suess"; 
 
var mapObj = { 
 
    "ae":"ä", 
 
    "oe":"ö", 
 
    "ue":"ü", 
 
    "ss":"ß", 
 
    "ä":"ae", 
 
    "ö":"oe", 
 
    "ü":"ue", 
 
    "ß":"ss" 
 
}, reg1 = /ä|ö|ü|ß/gi, reg2 = /ae|oe|aa|ss/gi; 
 

 
function conv(str) { 
 
    var reg = /ä|ö|ü|ß/i.test(str)?reg1:reg2; 
 
    return str.replace(reg, function(matched, offset, s){ 
 
    return mapObj[matched]; 
 
    }); 
 
} 
 
str = conv(str); 
 
document.body.innerHTML += '<br/>1:'+str; 
 
str = conv(str); 
 
document.body.innerHTML += '<br/>2:'+str;

最初複製的Replace multiple strings with multiple other strings

你的情況:

var str = "Bjoern, Joern, und ein Schloss am Woerthersee."; 
 
var mapObj1 = { 
 
    "ae":"ä", 
 
    "oe":"ö", 
 
    "ue":"ü", 
 
    "ss":"ß" 
 
}; 
 
var mapObj2 = { 
 
    "ä":"ae", 
 
    "ö":"oe", 
 
    "ü":"ue", 
 
    "ß":"ss" 
 
}; 
 

 
str = str.replace(/ae|oe|aa|ss/gi, function(matched){ 
 
    return mapObj1[matched]; 
 
}); 
 
document.write(str) 
 

 
str = str.replace(/ä|ö|ü|ß/gi, function(matched){ 
 
    return mapObj2[matched]; 
 
}); 
 

 
document.write('<br/>'+str)

+1

好吧,更正.... – mplungjan

+0

謝謝。但是有可能在一個功能中做到這一點?所以我可以只寫一個字符串,它會一直切換到相反的位置?這是我正在尋找的。 – clde

+0

這是應該工作嗎?因爲對我來說不是:( – clde