如何编写正则表达式以匹配html中的第一个Div,或者如果第一个中没有匹配则匹配第二个

时间:2011-04-18 15:04:30

标签: html regex html-parsing

我需要编写一个正则表达式,它在html中看起来是一个带有ID="test1"的div元素,如果它只找不到它那么它应该找到带有ID="test2"的div元素

e.g。

<div id="test1">
some stuff inside test1
</div>

<div id="test2">
some stuff inside test2
</div>

如果div id="test1"存在,那么我需要文本“test1中的一些东西”。如果没有id="test1"的div,那么它应该用id="test2"看看div并在“test2”中找到文本,在这种情况下是“test2中的一些东西”

2 个答案:

答案 0 :(得分:0)

可以在页面加载后完成吗?喜欢,用Javascript?如果不需要预处理,你可以这样做:(jQuery)

$(document).ready(function(){

  // does test1 exist?
  if( $("#test1").length > 0 ){
    $("#test1").html("some stuff goes in here");
  }

  // does test2 exist?
  if( $("#test2").length > 0 ){
    $("#test2").html("some stuff goes in here");
  }

});

如果这不起作用,您可以在输出HTML之前尝试使用您正在使用的任何语言进行字符串搜索。

答案 1 :(得分:0)

只是想知道,为什么不做以下事情?

var returnVal;
if(document.getElementById("test1"))
    returnVal = document.getElementById("test1").innerHTML;
else if (document.getElementById("test2"))
    returnVal = document.getElementById("test2").innerHTML;
else
    returnVal = "no value found";

但是,如果你希望通过正则表达式实现类似的东西:

var divs = document.body.innerHTML, returnVal = "", ids = new Array();
ids.push("test1");
ids.push("test2");
    for (var i = 0; i < ids.length; i++) {
         var toBeFound = "<div(.*?)id=(\"|\')" + ids[i] + "(\"|\')(.*?)>";
         var newRegex = new RegExp(toBeFound, "i");
         var match = divs.match(newRegex);
         if (match.length > 0) {
             returnVal += document.getElementById(ids[i]).innerHTML + ",";
         }
    }

此代码扫描所有文档。对于ids数组中提供的每个id,代码将搜索id为当前数组元素的div。如果它会找到,那么它将在returnVal字符串中添加相关div的innerHTML,并且每个值将用逗号分隔。但是,我强烈推荐第一个代码。