Javascript正则表达式没有按预期工作

时间:2012-08-25 12:16:48

标签: javascript regex

我将变量中的页面中的HTML作为纯文本。现在我需要删除文本的某些部分。这是我需要更改的HTML的一部分:

<div class="post"><a name="6188729"></a>
    <div class="igmline small" style="height: 20px; padding-top: 1px;">
        <span class="postheader_left">
            <a href="#"  style="font-size:9pt;"> RuneRifle </a>
            op 24.08.2012 om 21:41 uur
        </span>
        <span class="postheader_right">
            <a href="http://link">Citaat</a> <a href="http://link">Bewerken</a>
        </span>
        <div style="clear:both;"></div>
    </div>
    <div class="text">Testforum</div>
    <!-- Begin Thank -->
    <!-- Thank End -->
</div>

这些取代了工作:

pageData = pageData.replace(/href=\".*?\"/g, "href=\"#\"");
pageData = pageData.replace(/target=\".*?\"/g, "");

但是这个替换根本不起作用:

pageData = pageData.replace(
  /<span class=\"postheader_right\">(.*?)<\/span>/g, "");

我需要使用类span及其中的所有内容删除每个postheader_right,但它无法正常工作。我对正则表达式的了解并不是很好,所以如果你能告诉我你是如何得到答案的,以及对它如何运作的一个小解释,我会很感激。

2 个答案:

答案 0 :(得分:2)

点与换行符不匹配。使用[\s\S]代替点,因为它将匹配所有空白字符或非空白字符(即任何内容)。

正如Mike Samuel所说,正则表达式并不是最好的方法,因为HTML中允许的复杂性(例如,如果在<a之后有一个换行符),特别是如果你必须寻找属性可能会以不同的顺序发生,但这就是你可以用来匹配示例HTML中的大小写的方式。

答案 1 :(得分:1)

  

我需要使用postheader_right类及其中的所有内容删除每个span,但它只是不起作用。

不要使用正则表达式来查找跨度。 Using regular expressions to parse HTML: why not?

var allSpans = document.getElementsByClassName('span');
for (var i = allSpans.length; --i >= 0;) {
  var span = allSpans[i];
  if (/\bpostheader_right\b/.test(span.className)) {
    span.parentNode.removeChild(span);
  }
}

应该这样做。

如果您只需要使用较新的浏览器,那么getElementsByClassName可以让您更轻松:

  

查找所有具有“test”类的div元素

var tests = Array.filter( document.getElementsByClassName('test'), function(elem){
  return elem.nodeName == 'DIV';
});