I'我在尝试将一个变量传递到一个已经工作的复杂正则表达式时遇到了问题

I'm having trouble trying to pass a variable into a complex regex that already works

本文关键字:一个 工作 复杂 正则表达式 问题 遇到 变量      更新时间:2023-09-26

下面是我一直在处理的一些代码,它基本上接受一个包含HTML的字符串,并删除class="normal"的元素。为此,原型函数在实际删除元素及其所有内部内容之前,先删除所有换行符等。以下代码按预期工作:

var msg = '<p>Keeping this paragraph</p>'n<p class="normal">Removing this paragraph<br>'n</p>'n<p class="normal">Another paragraph to remove<br>'n</p>';
String.prototype.takeOut = function() {   
    return this.replace(/('r'n|'n|'r)/gm," ")
           .replace(/<p[^>]*class="normal"[^>]*>(.*?)<'/p>/g, '');
};
alert(msg.takeOut());

我的问题是,我想通过这样的方法传递一个参数…

msg.takeOut('normal')

让原型函数接受这个参数来删除我们想要的任何类的元素,比如:

msg.takeOut('foo')
msg.takeOut('bar')

下面是一个更详细的例子:

http://jsfiddle.net/sc276v98/

我知道"new RegEx(("可能是解决方案,但我如何将其融入到已经有效的方案中?请不要jQuery!谢谢你的帮助!

由于Mintastic已经有了一个使用Regex的工作解决方案,这只是一个替代方案,使用节点:

var msg = '<p>Keeping this paragraph</p>'n<p class="normal">Removing this paragraph<br>'n</p>'n<p class="normal">Another paragraph to remove<br>'n</p>';
String.prototype.takeOut = function(x) {   
    var temp = document.createElement('div'), targets = temp.getElementsByClassName(x);
    temp.innerHTML = this;
    while(targets.length){ temp.removeChild(targets[0]); }
    return temp.innerHTML;
};
alert( msg.takeOut('normal') );

基于jsfiddle代码,尝试:

String.prototype.takeOut2 = function(i) {
  var regExp = new RegExp('<p[^>]*class="'+i+'"[^>]*>(.*?)<'/p>', 'g');
  return this.replace(/('r'n|'n|'r)/gm," ")
           .replace(regExp, '');
};