从字符串中提取图像src

14 javascript regex node.js

我正在尝试将所有图像元素匹配为字符串,

这是我的正则表达式:

html.match(/<img[^>]+src="http([^">]+)/g);
Run Code Online (Sandbox Code Playgroud)

这有效,但我想提取src所有图像.所以当我在这个String上执行正则表达式时:

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

它返回:

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

Mik*_*keM 22

您需要使用捕获组()来提取URL,如果您想要全局匹配g,即不止一次,在使用捕获组时,您需要exec在循环中使用(match在全局匹配时忽略捕获组).

例如

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" ]
Run Code Online (Sandbox Code Playgroud)

  • 似乎这个正则表达式不适用于所有img标签,但这适用于/<img.*?src="([^">]*//([^">]*?))".*?>/g; (5认同)
  • 有时候img标签在"src"attr之后可能有高度或其他一些attr.So正则表达式应该是rex =/<img rel="nofollow noreferrer" [^>] + src ="?([^"\ s] +)"?[^>]*\/> /克; (3认同)
  • 最终与此相反。否则,它不会拾取所有图像。/ &lt;img [^&gt;] + src =“([^”&gt;] +)/ g (2认同)

ale*_*ull 6

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);
Run Code Online (Sandbox Code Playgroud)


Def*_*ult 5

正如 Mathletics 在评论中提到的那样,还有其他更直接的方法可以从您的标签中检索src属性,<img>例如通过 id、name、class 等检索对 DOM 节点的引用,然后仅使用您的引用来提取您的信息需要。如果您需要对所有<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);
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您有一些限制迫使您使用正则表达式,那么提供的其他答案就可以正常工作。