在javascript中对字符串进行多次替换

时间:2014-08-21 21:01:22

标签: javascript jquery

我正在尝试使用javascript对字符串(php变量)进行多次替换。 这段代码:

<script>
jQuery(document).ready(function() {
var map = {
    "2014": "",
    "2015": "",
    "2016": "",
    "-": " ",
    "ú": "u"
};

var str = "<?php echo $data; ?>";
var result = str.replace(/[<?php echo $data; ?>]/g, function(m) {
    return replacements[m];
});
jQuery('.even_data').html(result);
});
</script>

给我错误:

invalid range in character class
var result = str.replace(/[2014-08-28]/g, function(m) {
                         ^

另一种方法是使用:

jQuery(document).ready(function() {
  var str = "<?php echo $data; ?>";
  var result = str.replace('2014','');
  jQuery('.even_data').html(result);
});

但是如何进行多次替换呢?

谢谢!

我尝试了这些答案,但它们无效:Javascript str_replace many at once

5 个答案:

答案 0 :(得分:1)

在Javascript Regex中,方括号[]是定义character classes的特殊字符。如果你想将它们用作文字,你必须逃避它们:

str.replace(/\[2014-08-28\]/g, function(m) {

答案 1 :(得分:1)

让PHP更容易做到这一点而不是JavaScript。

$map = array(
    "2014" => "",
    "2015" => "",
    "2016" => "",
    "-" => " ",
    "ú" => "u"
);

$data = '2014-08-28';
$data = str_replace(array_keys($map), array_values($map), $data);

答案 2 :(得分:1)

您可以使用

function multiReplace(str, map) {
    for(var i in map) if(map.hasOwnProperty(i)) {
        str = str.replace(
            new RegExp(i.replace(/[.^$*+?()[{\\|]/g, '\\$&'), 'g'),
            map[i]
        );
    }
    return str;
}
var result = multiReplace(str, map);

它的工作原理如下:

  1. 它迭代map
  2. 的所有属性
  3. 它为每个属性构建一个正确的正则表达式
    1. 首先,它逃脱special regex characters.^$*+?()[{\|
    2. 然后它使用该字符串构建全局(g标志)正则表达式
  4. 它将该正则表达式的所有匹配项替换为map
  5. 中的相应值

答案 3 :(得分:0)

DEMO

你的正则表达不好。用实际的RE替换后,它应该有效:

    var result = str.replace(/(\d{4}|-|ú)/g, function(m) {
        return map[m];
    });

答案 4 :(得分:0)

使用JS就像那样:

var str = "2014 12 03, 2014, day";
var map = {"2014" : "2012", 
       "12" : "a",
       "03" : "",
       "day" : "sfsdf"};
$.each(map, function(key, value) {
    str = str.replace(new RegExp(key ,"g"), value);
});

// new str:&#34; 2012 a,2012,sfsdf&#34;