21

すべての画像要素を文字列として一致させようとしていますが、

これは私の正規表現です:

html.match(/<img[^>]+src="http([^">]+)/g);

srcこれは機能しますが、すべての画像を抽出したいと思います。したがって、この文字列に対して正規表現を実行すると、次のようになります。

<img src="http://static2.ccn.com/ccs/2013/02/img_example.jpg />

それは返します:

"http://static2.ccn.com/ccs/2013/02/img_example.jpg"

4

6 に答える 6

25

URL を抽出するには、キャプチャ グループを使用する必要があります。キャプチャ グループを使用するときにグローバルに、つまり複数回()一致させたい場合は、ループ内で使用する必要があります (グローバルに一致する場合はキャプチャ グループを無視します)。 gexecmatch

例えば

var m,
    urls = [], 
    str = '<img src="http://site.org/one.jpg />\n <img src="http://site.org/two.jpg />',
    rex = /<img[^>]+src="?([^"\s]+)"?\s*\/>/g;

while ( m = rex.exec( str ) ) {
    urls.push( m[1] );
}

console.log( urls ); 
// [ "http://site.org/one.jpg", "http://site.org/two.jpg" ]
于 2013-02-21T22:29:24.683 に答える
8
var myRegex = /<img[^>]+src="(http:\/\/[^">]+)"/g;
var test = '<img src="http://static2.ccn.com/ccs/2013/02/CC_1935770_challenge_accepted_pack_x3_indivisible.jpg" />';
myRegex.exec(test);
于 2013-02-18T15:16:49.913 に答える
5

数学がコメントで述べたように、ID、名前、クラスなどを介して DOM ノードへの参照を取得し、参照を使用して情報を抽出するなど、タグからsrc属性を取得するより簡単な方法が他にもあります。<img>必要。すべての<img>要素に対してこれを行う必要がある場合は、次のようにすることができます。

var imageTags = document.getElementsByTagName("img"); // Returns array of <img> DOM nodes
var sources = [];
for (var i in imageTags) {
   var src = imageTags[i].src;
   sources.push(src);
}

ただし、正規表現の使用を強制する何らかの制限がある場合は、提供されている他の回答は問題なく機能します。

于 2013-02-18T15:18:50.500 に答える
0

グループsrcを使用して値にアクセスできます

                                                   |->captured in group 1
                                   ----------------------------------                
var yourRegex=/<img[^>]+src\s*=\s*"(http://static2.ccn.com/ccs[^">]+)/g;
var match = yourRegex.exec(yourString);
alert(match[1]);//src value
于 2013-02-18T15:14:40.283 に答える