プロが教えるわが家の防犯対策術!

正規表現を使いたいのですが、
javascriptでは戻り読み表現が使えないと知って困っています・・・

<a href="http://abc.com/"><img src="http://image.abc.com/def.jpg"></a>
<a href="http://hogehoge.com/"><img src="http://hogehoge.com/hoge.jpg"></a>
<a href="http://123.com/"><img src="http://456.com/789.jpg"></a>
<a href="http://momomo.com/"><img src="http://lelele.com/momo.jpg"></a>
上記のソースから

http://image.abc.com/def.jpg
http://hogehoge.com/hoge.jpg
http://456.com/789.jpg
http://lelele.com/momo.jpg
だけをマッチさせたいです。
(画像のパスだけをマッチさせたい)

URLは今後も増える可能性があり、サイト名、文字数、画像名などもバラバラです。

うまくマッチさせる方法はありますでしょうか。
詳しい方いらっしゃいましたらよろしくお願いします!

A 回答 (4件)

dom かぁ



なら、1.8で
alert (Array.map (document.querySelectorAll ('a > img'), (function (i) i.src)).join ('\n'));
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!

お礼日時:2011/04/20 15:27

既に正解が出てますが。

。。
正規表現を使わずにDOMアクセスじゃ駄目なんですか?
--------------------------------------------------------
<body>

<a href="http://abc.com/"><img src="http://image.abc.com/def.jpg"></a>
<a href="http://hogehoge.com/"><img src="http://hogehoge.com/hoge.jpg"></a>
<a href="http://123.com/"><img src="http://456.com/789.jpg"></a>
<a href="http://momomo.com/"><img src="http://lelele.com/momo.jpg"></a>

<script type="text/javascript">

var i;
var imgs = document.getElementsByTagName('img');
var pool = [];


for( i = 0; i < imgs.length; i++ )
{
pool.push( imgs[i].src );
}

alert( pool );

</script>
</body>
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!

お礼日時:2011/04/20 15:27

var str = document.getElementsByTagName('body')[0].innerHTML;


var reg = /(?:<img\s+src\s*=\s*"(.+)?".*?>)/g;
var rst = [];
var tmp;

while (tmp = reg.exec (str))
 rst.push (tmp[1]);

alert(rst.join("\n"));

とか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!

お礼日時:2011/04/20 15:26

あまり詳しくないですが、


2段階に分けてパーズしてみてはいかがでしょう。

(function(){

var src = document.getElementsByTagName('body')[0].innerHTML;

var regex1 = new RegExp( '<[^>]*>', 'g' );
var regex2 = new RegExp( '<img\\s[^>]*src="([^">]+)"[^>]*>', 'i' );

var tags = src.match( regex1 );

for( var i in tags ){

 var tag = tags[i];

 if( regex2.test( tag ) ){

  var matches = regex2.exec( tag );
  var url = matches[1];

  alert( url );

 }

}

})();
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
結論としては、1段階でのマッチは不可能ということでしょうか。

情けないことに教えてくださった内容の半分も理解できていないのですが、ご回答とソースとにらめっこで何とかがんばってみます。

内容がわからないので、ベストアンサーは一番早く回答をくださった方にさせていただきます。
本当にありがとうございました!

お礼日時:2011/04/20 15:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!