GM_xmlhttpRequestで取得してきたresponseTextの中から正規表現を使って複数抽出したい場合のなぞ
GM_xmlhttpRequestは関係無くてexecとmatchのgフラグに関するエントリー。
GM_xmlhttpRequestで取得してきたresponseTextの中から正規表現を使ってimgのsrcを抽出したいとき以下のようにすると思う。
/<img src\="(.+?)"/.exec(res.responseText);
でもこれだとマッチしたもの一個しか抽出してくれない。そういえば複数抽出したいときにはgフラグを付けるんだなと思い出して、gをつけても効果なし。
/<img src\="(.+?)"/g.exec(res.responseText);
なんでやねん。
あらかじめ抽出したいimgの個数がわかっていれば、以下のようにfor文でまわすとちゃんと抽出できた。
//5個ひろってこい for(var i=0; i<5; i++){ var h = /<img src\="(.+?)"/g.exec(res.responseText); console.log(h); }
誰かexecの正しい使い方を教えてください。
matchでやってみたらfor文使わなくても抽出したものが配列になって出力してくれた。
var h = res.responseText.match(/<img src\="(.+?)"/g); console.log(h);
リファレンス眺めてもexecとmatchは同じようにみえるけど違うのか。
正規表現が g フラグを含んでいる場合、マッチのすべてを含む 配列 (Array) を返します。
match - 詳細 - MDC
これかな。execはマッチ全文とマッチ分を出力するための使い捨て感覚か。文字列ならmatch使っておけか。微妙な使い分けが要求される。