【问题标题】:Javascript RegExp match text between <a> tagsJavascript RegExp 匹配 <a> 标签之间的文本
【发布时间】:2011-12-13 11:08:15
【问题描述】:

我需要用一个 javascript RegExp 匹配字符串:bimbo999 从这个标签:&lt;a href="/game.php?village=828&amp;amp;screen=info_player&amp;amp;id=29956" &gt;bimbo999&lt;/a&gt;

来自 URL 变量(村庄和 id)的数字每次都在变化,所以我必须以某种方式将数字与 RegExp 匹配。

</tr>
                    <tr><td>Sent</td><td >Oct 22, 2011  17:00:31</td></tr>
                                <tr>
                        <td colspan="2" valign="top" height="160" style="border: solid 1px black; padding: 4px;">
                            <table width="100%">
    <tr><th width="60">Supported player:</th><th>
    <a href="/game.php?village=828&amp;screen=info_player&amp;id=29956" >bimbo999</a></th></tr>
    <tr><td>Village:</td><td><a href="/game.php?village=828&amp;screen=info_village&amp;id=848" >bimbo999s village (515|520) K55</a></td></tr>
    <tr><td>Origin of the troops:</td><td><a href="/game.php?village=828&amp;screen=info_village&amp;id=828" >KaLa I (514|520) K55</a></td></tr>
    </table><br />

    <h4>Units:</h4>
    <table class="vis">

我试过这个:

var match = h.match(/Supported player:</th>(.*)<\/a><\/th></i);

但不工作。你们能帮帮我吗?

【问题讨论】:

  • 为什么要直接操作 HTML?通过 DOM 工作要安全得多(通常也更容易)。找到正确的&lt;table&gt;,然后使用jQuery或Sizzle之类的跨浏览器选择器库在表格中找到合适的&lt;a&gt;标签,然后只需获取&lt;a&gt;标签的innerHTML即可获得bimbo999。
  • 使用正则表达式遍历html标签不是很好的做法。您是否尝试过从标签制作 DOM 元素并获取 innerHTML?

标签: javascript regex match


【解决方案1】:

试试这个:

/<a[^>]*>([\s\S]*?)<\/a>/
  • &lt;a[^&gt;]*&gt; 匹配开头的 a 标签
  • ([\s\S]*?) 匹配结束标签之前的任何字符,尽可能少
  • &lt;\/a&gt; 匹配结束标签

([\s\S]*?) 捕获标记之间的文本作为 execmatch 调用返回的数组中的参数 1。

这真的只适用于在a 元素中查找文本,它不是非常安全或可靠,但是如果你有一个大页面的链接并且你只需要它们的文本,这个会做的。


不使用 RegExp 的更安全的方法是:

function getAnchorTexts(htmlStr) {
    var div,
        anchors,
        i,
        texts;
    div = document.createElement('div');
    div.innerHTML = htmlStr;
    anchors = div.getElementsByTagName('a');
    texts = [];
    for (i = 0; i < anchors.length; i += 1) {
        texts.push(anchors[i].text);
    }
    return texts;
}

【讨论】:

  • /&lt;a[^&gt;]*&gt;((?:.|\r?\n)*?)&lt;\/a&gt;/ 也可以方便地匹配多行的下一个结束标记。
  • 它已经匹配多行了\s match any white space character [\r\n\t\f ]
【解决方案2】:

我没有使用 Regex 的经验,但我认为您可以将 JQuery 与 .text() 一起使用!

JQuery API - .text()

我的意思是如果你使用:

var hrefText = $("a").text(); 

您将在不使用正则表达式的情况下获得您的文本!

.find("a"),然后给你一个a的标签对象列表,然后使用.each()在该列表上循环,然后你可以使用.text()获取文本。

或者你可以使用类选择器、id 或任何你想要的东西!

【讨论】:

  • 这也可以通过使用getElementsByTagName('a') 的常规javascript 来完成。不错的主意。
  • 附带说明,使用正则表达式解析 HTML 不是一个好主意 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-27
  • 1970-01-01
  • 2019-03-25
  • 1970-01-01
  • 2011-06-01
相关资源
最近更新 更多