2010-11-27 7 views
1

j'ai besoin de mettre en œuvre une expression rationnelle en Javascript qui me permet de faire correspondre les catégories et les éléments suivants, associant les éléments à leur bonne catégorie, mais je ne sais pas comment:RegExp en Javascript pour regrouper des éléments dans les catégories

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

Je peux avoir plus de 10 catégories, et je ne sais pas combien d'éléments seront dans chaque catégorie. Je pourrais facilement créer un RegExp qui me correspond les catégories et un autre pour les articles, mais comment puis-je créer une relation entre eux?

Merci et meilleures salutations,

Livio

Répondre

0

Les expressions régulières ne sont pas la solution miracle pour tous les problèmes .. RegEx est fait pour la correspondance de texte à l'aide de motifs. À mon humble avis, ce problème est mieux résolu en utilisant n'importe quel analyseur XML.

+0

Étant donné qu'elle a besoin de résoudre le problème en javascript et il est HTML, peut-être pas XHTML, il est probablement pas une question pour un analyseur XML. Mais votre point de vue sur l'expression régulière. – Orbling

+0

J'ai essayé d'utiliser un analyseur XML, mais il semble que cette page n'est pas bien formée et ne permet pas de l'analyser ... – liv913

+0

@ liv913: Désolé d'entendre ça; c'est une considération du monde réel qui exclut la possibilité d'une solution propre. Les analyseurs HTML/XML sont notoirement moins permissifs que les navigateurs actuels. Les navigateurs permissifs ont fait un monde de mal au nom du bien. – tchrist

1

Ne pas lire le HTML en utilisant des regex. Donnez les classes tables, puis lisez-les avec traversée DOM. Le code HTML devrait ressembler à ceci:

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

Ensuite, faire une liste d'entre eux comme ceci:

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

Je suis définitivement du côté des partisans de l'analyseur sur celui-ci. C'est pourquoi j'ai été déçu de lire que @ liv913 rapporte que le HTML actuel n'est pas analysable par les classes d'analyse disponibles. – tchrist

Questions connexes