Javascript 基于搜索/替换对替换字符串中的多个值

Javascript 基于搜索/替换对替换字符串中的多个值,javascript,Javascript,如何在javascript中通过替换将值替换为数组 我想一起替换数字(例如)。怎么样 1-替换为11 2-替换为22 演示: 变量数组={“1”:“11”,“2”:“22”} var str=“13332”; document.write(str.replace(array)); ​ var rep={“1”:“11”,“2”:“22”} var str=“13332”; 用于(输入代表){ str=str.split(key).join(rep[key]); } 文件编写(str); ​

如何在javascript中通过替换将值替换为数组

我想一起替换数字(例如)。怎么样

1
-替换为
11

2
-替换为
22

演示:


变量数组={“1”:“11”,“2”:“22”}
var str=“13332”;
document.write(str.replace(array));
​

var rep={“1”:“11”,“2”:“22”}
var str=“13332”;
用于(输入代表){
str=str.split(key).join(rep[key]);
}
文件编写(str);
​

您必须使用正则表达式创建一个模式,然后将其传递给
.replace
方法

var array = {"1":"11", "2":"22"}; // <-- Not an array btw.
// Output. Example: "1133322"
document.write( special_replace("13332", array) );

function special_replace(string_input, obj_replace_dictionary) {
    // Construct a RegEx from the dictionary
    var pattern = [];
    for (var name in obj_replace_dictionary) {
        if (obj_replace_dictionary.hasOwnProperty(name)) {
            // Escape characters
            pattern.push(name.replace(/([[^$.|?*+(){}\\])/g, '\\$1'));
        }
    }

    // Concatenate keys, and create a Regular expression:
    pattern = new RegExp( pattern.join('|'), 'g' );

    // Call String.replace with a regex, and function argument.
    return string_input.replace(pattern, function(match) {
        return obj_replace_dictionary[match];
    });
}
var数组={“1”:“11”,“2”:“22”};//

可以将函数传递到方法中


使用
reduce
功能怎么样

<script type="text/javascript">
  var array = {"1":"11", "2":"22"};
  var str = "13332";

  str = Object.keys(array).reduce(function(result, key) {
    return result.replace(new RegExp(key, 'g'), array[key]);
  }, str);

  document.write(str);
</script>

变量数组={“1”:“11”,“2”:“22”};
var str=“13332”;
str=Object.keys(数组).reduce(函数(结果,键){
返回result.replace(新的RegExp(键'g'),数组[key]);
},str);
文件编写(str);

但是没有数组…它不是数组,它是一个引用对象的名为“array”的变量。还要注意的是,使用
document.write()
@spacevillain几乎是不合适的。你试过这个吗?我试过了,我不知道有什么问题。1被11替换,2被22替换,导致1133322对于非重复键和未修改原型,此方法足够了。但是,当按键可能相互干扰时,就会出现问题。例如:
123
上的
1-2,2-3
变成了
333
,而不是
233
(1被2取代,然后是3)。@RobW我认为关于修改原型的论点是不同的。如果决定不使用修改
对象的libs.prototype
,则并非每个人都希望在其
for in
循环中使用
hasOwnProperty
。关于这一点的讨论不应该渗透到使用
的每个示例中,因为在
@JuanMendes中,我只是为了完整性而提到了原型。最大的问题是整个字符串用于替换,这可能会导致意外的结果(如我评论中的简单示例所示)。非常好。如果您(或OP:)将其包装为可重用函数,可能会更好。@Phrogz我已将其转换为可重用函数。还省略了
Object.keys
,因为无论如何我都要循环键。非常好。您使用
/(…)/,'$1'
而不是
/…/,'$&'
?@Phrogz的原因是因为我不久前编写了正则表达式转义方法,没有考虑
$&
<代码>$&
也可以。@JuanMendes
“23333”
是使用该映射的结果,不是预期的结果吗?此外,将该映射与
“123”
一起使用会导致
“233”
,因此请在羞辱它之前尝试该代码;这是一个很好的js正则表达式的入门。我可能会尝试在这个用例中使用esajilla作为一个更简单的实现。应使用替换而不是映射(或重命名为映射)。
var array = {"1":"11", "2":"22"}; // <-- Not an array btw.
// Output. Example: "1133322"
document.write( special_replace("13332", array) );

function special_replace(string_input, obj_replace_dictionary) {
    // Construct a RegEx from the dictionary
    var pattern = [];
    for (var name in obj_replace_dictionary) {
        if (obj_replace_dictionary.hasOwnProperty(name)) {
            // Escape characters
            pattern.push(name.replace(/([[^$.|?*+(){}\\])/g, '\\$1'));
        }
    }

    // Concatenate keys, and create a Regular expression:
    pattern = new RegExp( pattern.join('|'), 'g' );

    // Call String.replace with a regex, and function argument.
    return string_input.replace(pattern, function(match) {
        return obj_replace_dictionary[match];
    });
}
RegExp.escape = function(text) {
    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}

String.prototype.mapReplace = function (replacements) {
    var regex = [];

    for (var prop in replacements) {
        regex.push(RegExp.escape(prop));
    }

    regex = new RegExp( regex.join('|'), "g" );

    return this.replace(regex, function(match){
      return map[match];
    });
}


var map = {"1":"11", "2":"22"};    
var str="13332";

document.write(str.mapReplace(map));​
var str = "13332",
    map = {"1":"11", "2":"22"};

str.split("").map( function(num ){
    return map.hasOwnProperty(num) ? map[num] : num;
}).join("");

//"1133322"
<script type="text/javascript">
  var array = {"1":"11", "2":"22"};
  var str = "13332";

  str = Object.keys(array).reduce(function(result, key) {
    return result.replace(new RegExp(key, 'g'), array[key]);
  }, str);

  document.write(str);
</script>