Замена определенных символов в JavaScript - PullRequest
5 голосов
/ 24 января 2012

Исходя из фона PHP, я немного избалован функцией str_replace, с помощью которой вы можете передать массив стогов сена и игл.

Я еще не видел такой функции в Javascript, но яудалось выполнить работу, хотя и некрасиво, с помощью показанного ниже кода:

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

Однако, поскольку моя потребность в замене некоторых символов другим символом растет, я уверен, чтоесть гораздо лучшие способы сделать это - как с точки зрения производительности, так и красивее.

Так что я могу сделать вместо этого?

Ответы [ 5 ]

5 голосов
/ 24 января 2012

Вы можете использовать это:

    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/

3 голосов
/ 24 января 2012

Красота 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

Демо-версия здесь .

2 голосов
/ 24 января 2012

Вот несколько других ответов. Мне просто нравится, из-за объявления замены значения ключа

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);
2 голосов
/ 24 января 2012

Если вам проще, вы можете представить себе что-то вроде этого;

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

т.е. создайте в параметре 1 регулярное выражение, которое принимает все искомые токены, а затем в функции добавьте случаи для замены.

0 голосов
/ 24 января 2012

PHP.js имеет функцию, которая может решить вашу проблему: http://phpjs.org/functions/str_replace:527

...