2012-07-06 35 views
2

有沒有什麼簡單的方法可以在一個指令中使用不同替換方式替換多個字符中的字符,就像在PHP中一樣?Javascript str_replace一次很多

我的意思是,是這樣的:

replace('áéíóú', 'aeiou'); 

,取代了A,E與E,I與我,等...

非常感謝提前,

+0

看到這個[鏈接](http://stackoverflow.com/a/2064057/889678)可能會幫助你 – mgraph 2012-07-06 16:24:30

回答

7

使用帶有全局標誌的正則表達式:

var map = { 
    "á": "a", 
    "é": "e", 
    "í": "i", 
    "ó": "o", 
    "ú": "u" 
}; 

"áéíóú".replace(/[áéíóú]/g, function(m){ 
    return map[m]; 
}); 
+1

偉大的思想和所有:) – Utkanos 2012-07-06 16:27:26

+0

非常感謝你 – 2012-07-06 16:56:34

3

不是真的。試試這個:

var map = {'á': 'a', 'é': 'e', 'í': 'i', 'ó': 'o', 'ú': 'u'}; 
var result = 'áéíóú'.replace(/./g, function(m) { return map[m] ? map[m] : m; }); 
3

是的,你能做到這一點在JavaScript:

var str = "áéíóú"; 
var result = str.replace(/[áéíóú]/g, function(m) { 
    switch (m) { 
     case "á": 
      return "a"; 
     case "é": 
      return "e"; 
     case "í": 
      return "i"; 
     case "ó": 
      return "o"; 
     case "ú": 
      return "u"; 
    } 
}); 

另一種方式是查找表:

var replacements = { 
    "á": "a", 
    "é": "e", 
    "í": "i", 
    "ó": "o", 
    "ú": "u" 
}; 

var str = "áéíóú"; 
var result = str.replace(/[áéíóú]/g, function(m) { 
    return replacements[m]; 
}); 

因爲replace這些工作可以接受一個正則表達式,而「替換」可以是一個功能。該函數接收匹配作爲參數的字符串。如果函數沒有返回任何東西,或者返回undefined,則保留原文;如果它返回別的東西,那就用它來代替。正則表達式/[áéíóú]/g是「字符」類,意思是「任何這些字符」,末尾的g表示「全局」(整個字符串)。