2011-04-18 39 views
0

我需要编写一个正则表达式,它将在html中查找带有ID="test1"的div元素,如果它不找到它只有它应该寻找div元素与ID="test2"如何编写一个正则表达式来匹配html中的第一个div或第二个div如果第一个div中没有​​匹配

eg

<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内的某些内容”中

+6

***之前*** [他是](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454)*** – Will 2011-04-18 15:06:52

+3

如果你想解释你的问题而不是一个可能的解决方案,我们可能会想出更好的答案。 – Niklas 2011-04-18 15:10:50

+0

虽然我同意Niklas,但我已经留下了一个答案,可以帮助你。我们真的需要知道你在做什么,大局是什么。 – Josh 2011-04-18 15:15:24

回答

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之前。

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,并且每个值都将用逗号分隔。不过,我强烈推荐第一个代码。

相关问题