我在尝试将变量传递到已经有效的复杂正则表达式时遇到了麻烦

时间:2015-07-03 19:37:46

标签: javascript regex

下面是我一直在搞乱的一些代码,它基本上采用包含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/

我知道“新的RegEx()”可能是解决方案,但我如何将其纳入已有的工作中?请不要jQuery!谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

根据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, '');
};

答案 1 :(得分:0)

由于Mindastic已经有一个使用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') );