在现有脚本中包含.replace函数和正则表达式映射方法

时间:2018-01-09 15:00:34

标签: javascript html regex replace str-replace

我有以下脚本:

$(".balkenclosed").click(function() {
window.location = $(this).find("a").attr("href"); 
return false;
});

我尝试添加这样的.replace函数:

var replace = new Map([
/ [^a-zA-Z0-9\s]/ig, "", $id
]),
id = a;
replace.forEach(function(value, key){
id = id.replace(key, value);
});

它应该替换div中id中的无效字符,如下所示:

<div class="balken"><div class="balkenopen"><a id="2our$ / team/2$"
style="text-decoration:none; color:black;" href="#2our$ / team/2$">
our team</a></div></div>

这种情况下的结果应该是id:“our_team”和href:“our_team”

我的方法不起作用,我觉得我完全错了。 我真的很感激任何正确方向的暗示

2 个答案:

答案 0 :(得分:1)

使用value作为正则表达式

var replace = [
   /[^a-zA-Z0-9\s]/ig, ""
];
replace.forEach(function(value, key){
  id = id.replace( value, "");
});

事实上,看看替换的内容,只需

id = id.replace( replace[0], replace[1]);

答案 1 :(得分:1)

我写了jquery,它会产生你想要的结果,你可以改进。希望这会对你有所帮助。

  

请考虑它将搜索整个锚标记并在找到匹配项时替换。将$(a)替换为特定搜索的更合适的选择器。

$('a').each(function() {
  var self = $(this);
  var id = self.attr('id');
  var href = self.attr('href');
  if (id)
    self.attr('id', stripEverything(id, '_'));
  if (href)
    self.attr('href', '#'+stripEverything(href, '_'));
});

function stripEverything(string, replaceSpaceWith) {
  return string.replace(/[^a-zA-Z ]+/g, '').split(' ').filter(function(e) {
    return e
  }).join(replaceSpaceWith);
}

您可以在Fiddle

查看解决方案