gpt4 book ai didi

javascript - 如何使用 Javascript Regex 从字符串中获取数据

转载 作者:行者123 更新时间:2023-12-02 19:26:29 25 4
gpt4 key购买 nike

我无法发布我试图提取的确切数据,但这是一个具有相同结果的基本场景。我正在抓取页面的主体并尝试从中提取 bit.ly 链接。举例来说,这是我试图从中获取链接的数据 block 。

字符串:

<a href="/l.php?u=http%3A%2F%2Fbit.ly%2FPq8AkS&amp;h=aAQFZxdL0&amp;s=1" target="_blank"    rel="nofollow nofollow" onmouseover="LinkshimAsyncLink.swap(this, &quot;http:\\/\\/bit.ly\\/Pq8AkS&quot;);" onclick="LinkshimAsyncLink.referrer_log(this, &quot;http:\\/\\/bit.ly\\/Pq8AkS&quot;, &quot;http:\\/\\/www.facebook.com\\/si\\/ajax\\/l\\/render_linkshim_log\\/?u=http\\u00253A\\u00252F\\u00252Fbit.ly\\u00252FPq8AkS&amp;h=aAQFZxdL0&amp;s=1&quot;);">http://bit.ly/Pq8AkS</a></div><div class="shareUnit"><div class="-cx-PRIVATE-fbTimelineExternalShareUnit__wrapper"><div><div class="-cx-PRIVATE-fbTimelineExternalShareUnit__root -cx-PRIVATE-fbTimelineExternalShareUnit__hasImage"><a class="-cx-PRIVATE-fbTimelineExternalShareUnit__video -cx-PRIVATE-fbTimelineExternalShareUnit__image -cx-PRIVATE-fbTimelineExternalShareUnit__content" ajaxify="/ajax/flash/expand_inline.php?target_div=uikk85_59&amp;share_id=271663136271285&amp;max_width=403&amp;max_height=403&amp;context=timelineSingle" rel="async" href="#" onclick="CSS.addClass(this, &quot;-cx-PRIVATE-fbTimelineExternalShareUnit__loading&quot;);CSS.removeClass(this, &quot;-cx-PRIVATE-fbTimelineExternalShareUnit__video&quot;);"><i class="-cx-PRIVATE-fbTimelineExternalShareUnit__play"></i><img class="img" src="http://external.ak.fbcdn.net/safe_image.php?d=AQDoyY7_wjAyUtX2&amp;w=155&amp;h=114&amp;url=http%3A%2F%2Fi1.ytimg.com%2Fvi%2FDre21lBu2zU%2Fmqdefault.jpg" alt="" /></a>

现在,我可以使用以下代码获得我正在寻找的内容,但链接并不总是正好是 6 个字符长。所以这会导致一个问题......

Body = document.getElementsByTagName("body")[0].innerHTML;
regex = /2Fbit.ly%2F(.{6})&amp;h/g;
Matches = regex.exec(Body);

这是我最初尝试的,但我遇到的问题是它获取了太多数据。它会一直走到上面字符串中的最后一个 "&h",而不是停在它遇到的第一个。

Body = document.getElementsByTagName("body")[0].innerHTML;
regex = /2Fbit.ly%2F(.*)&amp;h/g;
Matches = regex.exec(Body);

所以基本上我要关注的字符串的主要部分是“%2Fbit.ly%2FPq8AkS&h”,这样我就可以从中得到“Pq8AkS”。当我使用 (.*) 时,它会抓取大字符串中 "%2F" 和最后一个 "&h" 之间的所有内容如上所述。

最佳答案

您不应该在 HTML 上使用正则表达式。使用 DOM 函数获取所需的链接对象,然后从中获取 href 属性,然后您可以仅在 href 上使用正则表达式。

默认情况下,.* 是贪婪的,这意味着它匹配它可以匹配的最多内容,并且仍然找到匹配项。如果你希望它是非贪婪的(匹配尽可能少的),你可以使用这个 .*? 来代替,如下所示:

regex = /2Fbit.ly%2F(.*?)&amp;h/;

我也不认为您希望在正则表达式上使用 g 标志,因为正确的 URL 中应该只有一个匹配项。

如果您显示 HTML 的其余部分,我们可以提供有关查找正确链接对象的建议,而不是尝试匹配整个 HTML 正文。

<小时/>

仅供引用,非贪婪匹配的另一个技巧是执行以下操作:

regex = /2Fbit.ly%2F([^&]*)&amp;h/;

它匹配一系列不是&的字符,后跟&h,只要&可以达到相同的目标。 t 位于匹配的序列中。

关于javascript - 如何使用 Javascript Regex 从字符串中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11998414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com