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;

}
}

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/12/17 09:14:55
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:mattn No.1

回答回数104ベストアンサー獲得回数23

ポイント60pt
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を返すので、ここはチェックが必要です。

id:yamamoton3

完璧です!

ありがとうございます!

2009/12/17 09:14:20

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません