我正在尝试使用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
答案 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);
它的工作原理如下:
map
.^$*+?()[{\|
g
标志)正则表达式map
答案 3 :(得分:0)
你的正则表达不好。用实际的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;