人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

google ajax feed api を使って RSSの情報を取得し、contentに出現する最初の画像のURLを出力したいのですが、正規表現の書き方がわからずに困っています。
blogのRSSを取得するので画像のURLは必ず example.jp/img/ 以下となります。

jpg か gif かはわかりません。


=============
テストの記事
<img src="http://example.jp/img/test.jpg"><img src="http://example.jp/img/test.gif">
本文です。

=============

取得したいのは、「http://example.jp/img/test.jpg」
となります。


誰か助けてください。

以下のようなjavascriptを書いているのですが、うまく取得できません。


function feedLoaded(result) {
if (!result.error) {
// Grab the container we will put the results into
var container = document.getElementById("content");
container.innerHTML = '';
var htmlstr = "";
// Loop through the feeds, putting the titles onto the page.
// Check out the result object for a list of properties returned in each entry.
// http://code.google.com/apis/ajaxfeeds/documentation/reference.html#JSON
for (var i = 0; i < result.feed.entries.length; i++) {
var entry = result.feed.entries[i];
var img = entry.content.match(/http:\/\/.*\.example\.jp\/img\/.+\/[a-z0-9\.]+\.(jpg|gif)/i);

htmlstr += '<img src="'+ img +'" width="60" />';

}

container.innerHTML = htmlstr;

}
}

●質問者: yamamoton3
●カテゴリ:ウェブ制作
✍キーワード:.jp Ajax API blog GIF
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● mattn
●60ポイント ベストアンサー
var img = entry.content.match(/(http:\/\/.*?\.?example\.jp\/img\/[a-z0-9\.]+?\.(jpg|gif))/i)[1];

でどうでしょうか?

まずサブドメインのマッチの為に「http:\/\/.*\.example\.jp\」とexampleの前に「\.」があるので「http://example.jp」にはマッチしません。また「\/img\/.+\/」とあるので「http://example.jp/img/test.jpg」にはマッチせず「http://example.jp/img/foo/test.jpg」にマッチする様になっています。

さらに最長マッチになっているので、「http://example.jp/img/test.jpg http://example.jp/img/test.gif」とあった場合にこれが続けてマッチしてしまっています。これは「?」を付ける事で最短マッチになります。

最後に取りたい部分「http://example.jp/img/test.jpg」をグループとして「()」を付ける事でmatch関数の結果(配列)の1番目としてアクセス出来ます。

ただし、いずれにもマッチしなかった場合にはmatchがnullを返すので、ここはチェックが必要です。

◎質問者からの返答

完璧です!

ありがとうございます!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ