2010-11-27 32 views
1

我需要實現在Javascript中一個RegExp,讓我符合以下類別和項目,關聯項目到其正確的類別組的項目,但我不知道如何:正則表達式在JavaScript中的類

<table> 
    <tbody> 
     <tr> 
      <td> 
       <a href="mycategory1.asp">text</a> 
      </td> 
     </tr> 
</tbody> 
</table> 
<div> 
    <table> 
     <tbody> 
      <tr> 
       </td> 
        <a href="myitem1.asp">text</a> 
       <td> 
      </tr> 
      <tr> 
       </td> 
        <a href="myitem2.asp">text</a> 
       <td> 
      </tr> 
      <tr> 
       </td> 
        <a href="myitem3.asp">text</a> 
       <td> 
      </tr> 
      ..................... 
     </tbody> 
    </table> 
</div> 
<table> 
    <tbody> 
     <tr> 
      <td> 
       <a href="mycategory2.asp">text</a> 
      </td> 
     </tr> 
</tbody> 
</table> 

我可以有超過10個類別,我不知道每個類別中有多少項目。 我可以很容易地創建一個RegExp,它可以匹配項目的類別和另一個項目,但我怎樣才能在它們之間創建關係?

感謝和問候,

利維奧

回答

0

正則表達式是不是對所有問題的靈丹妙藥..正則表達式是使用模式匹配的文本製作。恕我直言,這個問題更好地解決使用任何XML解析器。

+0

鑑於她需要解決JavaScript中的問題,它是HTML,可能不是XHTML,它是可能不是XML解析器的問題。但是你關於正則表達式的觀點站得住腳。 – Orbling 2010-11-27 12:37:57

+0

我試圖使用XML解析器,但似乎這個頁面沒有正確形成,它不允許解析它... – liv913 2010-11-27 13:41:11

1

不要使用Regexes閱讀HTML。給表格類,然後用DOM遍歷讀取它們。該HTML應該是這樣的:

<table class="caption"> 
    <tbody> 
     <tr> 
      <td> 
       <a href="mycategory1.asp">text</a> 
      </td> 
     </tr> 
    </tbody> 
</table> 
<div> 
    <table class="itemlist"> 
     <tbody> 
      <tr> 
       </td> 
        <a href="myitem1.asp">text</a> 
       <td> 
      </tr> 
      <tr> 
       </td> 
        <a href="myitem2.asp">text</a> 
       <td> 
      </tr> 
      <tr> 
       </td> 
        <a href="myitem3.asp">text</a> 
       <td> 
      </tr> 
      ..................... 
     </tbody> 
    </table> 
</div> 
<table class="caption"> 
    <tbody> 
     <tr> 
      <td> 
       <a href="mycategory2.asp">text</a> 
      </td> 
     </tr> 
    </tbody> 
</table> 
... 

然後作出這樣它們的列表:

var captions = document.getElementsByClassName("caption"); 
var itemlists = document.getElementsByClassName("itemlist"); 
var items = new Array(); 
for (var i=0; i<captions.length; i++) { 
var categoryLink = captions[i].getElementsByTagName("a")[0]; 
var categoryItems = itemlists[i].getElementsByTagName("a"); 
for (int j=0; j<categoryItems.length; j++) { 
    items.push({"itemname":categoryItems[j].innerHTML, 
       "itemurl":categoryItems[j].href, 
       "categoryname":categoryLink.innerHTML, 
       "categoryurl":categoryLink.href}); 
} 
}