我将变量中的页面中的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
,但它无法正常工作。我对正则表达式的了解并不是很好,所以如果你能告诉我你是如何得到答案的,以及对它如何运作的一个小解释,我会很感激。
答案 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'; });