Javascript 中的正则表达式对类别中的项目进行分组

发布于 2024-10-04 07:17:24 字数 1281 浏览 1 评论 0原文

我需要在 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 个类别,但我不知道如何每个类别中都会包含许多项目。 我可以轻松创建一个与我匹配的类别和另一个与项目匹配的正则表达式,但如何在它们之间创建关系?

谢谢并致以最诚挚的问候,

利维奥

I need to implement a RegExp in Javascript that allows me to match the following categories and items, associating the items to their proper category, but I don't know how:

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

I can have more than 10 categories, and I don't know how many items will be in each category.
I could easily create a RegExp that matches me the categories and another one for the items, but how can I create a relation between them?

Thanks and best regards,

Livio

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

对风讲故事 2024-10-11 07:17:24

不要使用正则表达式读取 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});
 }
}

Don't read HTML using Regexes. Give the tables classes and then read them with DOM traversal. The HTML should look like this:

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

Then make a list of them like this:

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});
 }
}
一刻暧昧 2024-10-11 07:17:24

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

Regular Expressions is not the silver bullet for all the problems.. RegEx is made for text matching using patterns. IMHO this problem is better solved using any XML parser.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文