Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我需要使用正则表达式从html字符串中提取所有图像src_Javascript_Regex - Fatal编程技术网

Javascript 我需要使用正则表达式从html字符串中提取所有图像src

Javascript 我需要使用正则表达式从html字符串中提取所有图像src,javascript,regex,Javascript,Regex,下面是一个示例html字符串: PS:请注意字符串在图像中可以具有任意随机属性,有些图像可以用“/>”结束,有些图像可以用“>”结束。没关系。正则表达式应该过滤所有噪声并捕获数组中的所有图像 stackoverflow中给出的答案不考虑图像标记内部的空格和之间的属性

下面是一个示例html字符串:

PS:请注意字符串在图像中可以具有任意随机属性,有些图像可以用“/>”结束,有些图像可以用“>”结束。没关系。正则表达式应该过滤所有噪声并捕获数组中的所有图像

stackoverflow中给出的答案不考虑图像标记内部的空格和之间的属性

我正在寻找这样的代码:

var图片=[],
M
rx=/一些正则表达式/g;
而(m=rx.exec(str)){//str是任何类型的html字符串
push(m[SOME INDEX]);//m[SOME INDEX]以匹配src属性的值
}

我想我为你准备了一个模式。包括http/https/ftp/ftps或just/

(http|ftp|\/{2})?s?:?\/{2}(.*[^\s]+)\.(jp?eg|png|gif)\s

这可能是你需要的。但我不明白为什么必须使用
regex
。所以让我们关注这个例子。首先,我们必须做更多的验证以改进它

基本思想是,我们向容器
div
添加一个类,然后我们还可以使用
body
标记。但我建议将其颗粒化。选择包含所有
img
标记的元素。然后捕获它们的内部HTML并将正则表达式应用于该字符串。另外,我建议使用
selectQueryAll
它更简单

var图片=[],
M
var str=document.getElementById('container').innerHTML,
rex=/'+图片;
输出。子对象(pTag);
})

我正在这样做:

var
uri=response.request.uri,//来自节点
图片=[],
r=/src=“?([^”\s]+)(jp?g | png | gif)”/g,
M
while(m=r.exec(html)){
如果(!m[1].startsWith('data:')){
如果(!m[1].startsWith('http')){
m[1]=uri.protocol+'/'+uri.host+'/'+m[1]
}
图片推送(src:m[1]+m[2]);
}
}
尝试以下方法:

  /**
   * 
   * 1. src :- match will start by src
   * 2. (\s*) :- might be followed by 0 or more spaces
   * 3. =  :- then we definitely have =
   * 4. (\s*) :- might be followed by 0 or more spaces
   * 5. " :- then we will have "
   * 6. ([^\s]*) :- might be followed by 0 or more characters except space
   * 7. " :- finally we would have closing "
   */
var re = /src(\s*)=(\s*)"([^\s]*)"/g;

var str = "src=\"http://bsfsd1.png\" xyz  a src= \"http://bsfsd2.xyz\" axy src=   \"http://bsfsd3.png\" abc src   =  \"http://bsfsd4.png\" sandeep ";

var xArray; 
var pictures = [];
while(xArray = re.exec(str)){
  pictures.push(xArray[3]);
}
console.log(pictures);

为什么你需要正则表达式?为什么不在每个JS引擎中使用内置的HTML解析功能,并让它提取图像?HTML不是一种常规语言;用正则表达式解析它。不,不是。这里给出的答案并不能解决问题。这里有一个小问题:@phatfingers,我需要你的帮助。我特别要求正则表达式,因为我不能使用任何人提出的建议。我只能使用正则表达式,考虑HTML是一个字符串而不是文档。答案是这样的:var图片=[],m,rx= /一些正则表达式/g;而(m= rx.Exc(STR)){//STR是任何排序图片的HTML字符串。推(M[某些索引]);//m[[索引] ]匹配SRC属性值}@abelabbesnabi本质上这是同一个问题。你应该看看如何调整正则表达式中的空格。不管src中有什么,我所需要的只是提取它。我建议你用表达式和匹配的索引运行我的代码。看我的答案,你的正则表达式包含捕获(jp?g)匹配jpg、jg但不匹配jpeg的括号。src文件可能有许多文件扩展名。我们可以尝试使用更通用的regex/src(\s*)=(\s*)“([^\s]*)”/g