在Javascript中使用RegExp对类别中的项目进行分组

时间:2010-11-27 11:46:34

标签: javascript regex grouping

我需要在Javascript中实现一个RegExp,它允许我匹配以下类别和项目,将项目与其正确的类别相关联,但我不知道如何:

<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和另一个与项目匹配的RegExp,但是如何在它们之间创建关系呢?

谢谢和最诚挚的问候,

利维奥

2 个答案:

答案 0 :(得分: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});
 }
}

答案 1 :(得分:0)

正则表达式不是所有问题的灵丹妙药.RegEx用于使用模式进行文本匹配。恕我直言,使用任何XML解析器可以更好地解决这个问题。