【问题标题】:Find specific div with RegEx and print content使用 RegEx 查找特定 div 并打印内容
【发布时间】:2011-10-07 09:20:26
【问题描述】:

我正在尝试使用 this script 从外部网站提取一些文本。

它运行良好,但它会获取整个页面。我只想获取具有“内容”类的特定 div 中的内容。将整个页面放在变量'data'中,然后创建这个函数来剥离一些标签:

function filterData(data){
  data = data.replace(/<?\/body[^>]*>/g,'');
  data = data.replace(/[\r|\n]+/g,'');
  data = data.replace(/<--[\S\s]*?-->/g,'');
  data = data.replace(/<noscript[^>]*>[\S\s]*?<\/noscript>/g,'');
  data = data.replace(/<script[^>]*>[\S\s]*?<\/script>/g,'');
  data = data.replace(/<script.*\/>/,'');
  return data;
}

我将如何找到具有“内容”类的 div 并仅查看其中的内容?

更新:很抱歉使用 RegExes — 你能帮我在不使用 RegEx 的情况下获取内容吗?所以,这是我的 HTML 文件:

<a href="http://www.eurest.dk/kantiner/228/all.asp?a=9" class="ajaxtrigger">erg</a>
<div id="target" style="width:200px;height:500px;"></div>
<div id="code" style="width:200px;height:200px;"></div>
<script src="http://code.jquery.com/jquery.min.js"></script>
<script>
$(document).ready(function(){
var container = $('#target');
$('.ajaxtrigger').click(function(){
doAjax($(this).attr('href'));
return false;
});
function doAjax(url){
if(url.match('^http')){
$.getJSON("http://query.yahooapis.com/v1/public/yql?"+
            "q=select%20*%20from%20html%20where%20url%3D%22"+
            encodeURIComponent(url)+
            "%22&format=xml'&callback=?",
    function(data){
      if(data.results[0]){
        var tree = string2dom(data.results[0]);
        container.html($("div.content", tree.doc));tree.destroy();
      } else {
        var errormsg = '<p>Error: could not load the page.</p>';
        container.html(errormsg);
      }
    }
  );
} else {
  $('#target').load(url);
}
}
function filterData(data){

return tree;
}
});
</script>

【问题讨论】:

  • 为什么要使用正则表达式来解析 HTML?尤其是在使用 JavaScript 的浏览器中,这是完全没有必要的,您可以使用 DOM。
  • 与此同时,在 Sane 星球上:stackoverflow.com/questions/1732348/…
  • 是的,好吧,看来我不应该使用 RegEx 来执行此操作。问题是,我的 JavaScript 技能非常有限,而且我发现的代码使用了 RegEx,所以这就是我使用它们的原因。但我会尝试使用 DOM。谢谢!

标签: javascript regex


【解决方案1】:

试试这样的:

var matches = data.match(/<div class="content">([^<]*)<\/div>/);

if (matches) 
    return matches[1]; // div content

【讨论】:

    【解决方案2】:

    这里试试这个:

    <div[^>]*?class='content'[^>]*?>(.*?)</div>
    

    捕获的参考/1 将包含您的内容。尽管您不应该使用正则表达式来执行此操作 :)

    【讨论】:

    • 对不起,不知道。我很想学会在没有的情况下做到这一点!
    • 查看一些不错的功能,例如: getelementbyid 使用它,然后检查 id 属性,例如class='content' 然后通过另一个适当的函数获取元素的内容。根本不需要正则表达式 :) DOM 是你的朋友!
    【解决方案3】:

    这可能会对您有所帮助:

        var divtxt = match(/<div[^>]*class="content"[^>]>.*<\/div>/);
    

    但它可能会停在错误的地方。

    您应该使用 jquery 或原型使其成为 dom-object 并使用选择器找到正确的 div。 使用 jquery 你会做这样的事情:

        var divtxt = $(data).find(".content").first().html();
    

    记得先加载jquery库。

    【讨论】:

    • 好的,但我还应该加载问题中包含的脚本吗?
    【解决方案4】:

    试试这个:

    &lt;div\b[^&gt;]*class="content"[^&gt;]*&gt;([\s\S]*?)&lt;\/div&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-17
      • 2020-03-24
      • 2015-09-28
      • 2011-01-16
      • 2021-09-13
      相关资源
      最近更新 更多