2010-11-27 2 views
1

Ich brauche eine RegExp in JavaScript zu implementieren, die mir die folgenden Kategorien und Elemente entsprechen können, die Elemente in der richtigen Kategorie zuzuordnen, aber ich weiß nicht, wie:RegExp in JavaScript-Gruppenelemente in Kategorien

<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> 

Ich kann mehr als 10 Kategorien haben, und ich weiß nicht, wie viele Artikel in jeder Kategorie sein werden. Ich könnte leicht eine RegExp erstellen, die mir die Kategorien und eine andere für die Elemente, aber wie kann ich eine Beziehung zwischen ihnen erstellen?

Danke und viele Grüße,

Livio

Antwort

0

Reguläre Ausdrücke ist nicht das Allheilmittel für alle Probleme .. RegEx für Text Matching Muster hergestellt wird. IMHO dieses Problem ist besser gelöst mit jedem XML-Parser.

+0

Da sie das Problem in Javascript lösen muss, und es ist HTML, möglicherweise nicht XHTML, ist es wahrscheinlich keine Angelegenheit für einen XML-Parser. Aber dein Standpunkt zu Regex steht. – Orbling

+0

Ich habe versucht, einen XML-Parser zu verwenden, aber es scheint, dass diese Seite nicht gut gebildet ist und es nicht erlaubt, es zu analysieren ... – liv913

+0

@ liv913: Tut mir leid, das zu hören; Es ist eine echte Überlegung, die die Möglichkeit einer sauberen Lösung ausschließt. HTML/XML-Parser sind bekanntermaßen weniger permissiv als tatsächliche Browser. Permissive Browser haben im Namen des Guten eine Welt der Verletzung getan. – tchrist

1

Lesen Sie nicht HTML mit Regexes. Geben Sie die Tabellenklassen an und lesen Sie sie dann mit DOM-Traversal. Der HTML-Code sollte wie folgt aussehen:

<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> 
... 

Dann eine Liste von ihnen wie folgt machen:

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}); 
} 
} 
+0

Ich bin definitiv auf der Seite der Parser-Befürworter auf diesem. Deshalb war ich enttäuscht zu lesen, dass @ liv913 berichtet, dass der tatsächliche HTML-Code von den verfügbaren Parsing-Klassen nicht geparst werden kann. – tchrist