抽出しようとしている正確なデータを投稿することはできませんが、同じ結果になる基本的なシナリオを次に示します。ページの本文を取得して、そこからbit.lyリンクを抽出しようとしています。たとえば、これがリンクを取得しようとしているデータのチャンクだとします。
弦:
<a href="/l.php?u=http%3A%2F%2Fbit.ly%2FPq8AkS&h=aAQFZxdL0&s=1" target="_blank" rel="nofollow nofollow" onmouseover="LinkshimAsyncLink.swap(this, "http:\\/\\/bit.ly\\/Pq8AkS");" onclick="LinkshimAsyncLink.referrer_log(this, "http:\\/\\/bit.ly\\/Pq8AkS", "http:\\/\\/www.facebook.com\\/si\\/ajax\\/l\\/render_linkshim_log\\/?u=http\\u00253A\\u00252F\\u00252Fbit.ly\\u00252FPq8AkS&h=aAQFZxdL0&s=1");">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&share_id=271663136271285&max_width=403&max_height=403&context=timelineSingle" rel="async" href="#" onclick="CSS.addClass(this, "-cx-PRIVATE-fbTimelineExternalShareUnit__loading");CSS.removeClass(this, "-cx-PRIVATE-fbTimelineExternalShareUnit__video");"><i class="-cx-PRIVATE-fbTimelineExternalShareUnit__play"></i><img class="img" src="http://external.ak.fbcdn.net/safe_image.php?d=AQDoyY7_wjAyUtX2&w=155&h=114&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})&h/g;
Matches = regex.exec(Body);
これが私が最初に試みていたものですが、私が抱えている問題は、それがあまりにも多くのデータを取得することです。"&h"
最初にヒットした文字列で停止するのではなく、上記の文字列の最後まで進みます。
Body = document.getElementsByTagName("body")[0].innerHTML;
regex = /2Fbit.ly%2F(.*)&h/g;
Matches = regex.exec(Body);
つまり、基本的に私が焦点を当てようとしている文字列の主要部分は"%2Fbit.ly%2FPq8AkS&h"
、「Pq8AkS」をそこから取り出せるようにすることです。私が使用するとき、それは上の大きな文字列の最後(.*)
までのすべてをつかんでいます。"%2F"
"&h"