2012-01-24 204 views
5

來自PHP背景,我有點溺愛str_replace函數,您可以通過一堆乾草堆&針。替換javascript中的某些字符

我還沒有沒見過的Javascript這樣的功能,但我已成功地完成任務,altough難看,用如下代碼:

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

然而,正如我需要更換某些人物與其他角色的成長,我相信有很多更好的方法來實現這一目標 - 無論是在性能方面還是在漂亮方面。

那我能做些什麼呢?

+0

你可以創建一個函數,但我不知道一個原生的javascript函數。 –

+0

'myString.replace(「」,「 - 」)'可能不會做你想做的。 '「foo bar baz」.replace(「」,「 - 」)===「foo-bar baz」'。由於模式只替換第一次出現,所以用字符串替換。 –

回答

5

您可以使用此:

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]); 
    } 

把那成一個函數:

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; 
} 

用法示例小提琴: http://jsfiddle.net/rtLKr/

+0

用'\ ['&']'包裹每一個字符 - 對吧? – Industrial

+0

這是基於正則表達式,所以是的,他們大多數確實需要包裝和逃避。我通常懶得真的考慮它,只是把它扔進jsFiddle.net或其他東西的試驗和錯誤。 –

2

如果對你更容易,你會不喜歡這樣的東西;

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

即使參數1,它接受所有你正在尋找的標記正則表達式,然後在功能增加的情況下做了更換。

3

的JavaScript的好處是,你可以擴展基本類型的功能,您可以添加一個方法String本身:

// 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; 
} 

,現在使用它:

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

演示是here

2

這裏有一些其他答案的組合。我只是喜歡它,因爲替換鍵值聲明

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

我喜歡它,幹得好:) –

相關問題