正则表达式从xmls中提取图像

时间:2016-10-03 10:06:21

标签: javascript regex

我正致力于提取以xmls链接的图像文件名,这些文件名链接如下

<text>
  ![Image description](iuiFE240H-dM_2DAHpuRxt.jpg) 
</text>
<text>
  ![Image description](9u0I7ExVD0bzSfRIyEiH.png) 
</text>
<text>
  ![Image description]( 0eA0SaTj8d90aHrs72rC.jpg ) 
</text>

请注意图像文件名有时可能在a之后(有时在空白之后)开始。图像是jpg或png。另请注意,在第一个图像中,在文件名中使用了下划线和短划线。有关此正则表达式的任何帮助我会非常感激。我编写了一个函数,它循环遍历文件的字符串版本以提取图像,但它看起来非常混乱。

1 个答案:

答案 0 :(得分:1)

一种天真的方法是在](和可选空格之后获取任何非空格的文本块:

/]\(\s*(\S+)\s*\)/g

请参阅regex demo

为了使其更精确,请添加更多上下文子模式,例如

/!\[Image description]\(\s*(\S+)\s*\)/g
/]\(\s*([^\s)]+\.(?:jpe?g|png))\s*\)/gi

<强>详情:

  • ]\( - 匹配](字符序列
  • \s* - 0+ whitespaces
  • (\S+) - 1个非空格字符
  • \s* - 0+ whitespaces
  • \) - 文字)

更多详情:

  • [^\s)]+ - 匹配除空格以外的1个或多个字符)
  • \. - 一个点
  • (?:jpe?g|png) - jpgjpegpng
  • /i - 启用不区分大小写的匹配
  • /g - 启用全局修改器以匹配多次出现。

&#13;
&#13;
var regex = /]\(\s*(\S+)\s*\)/g;
var str = `<text>
  ![Image description](iuiFE240H-dM_2DAHpuRxt.jpg) 
</text>
<text>
  ![Image description](9u0I7ExVD0bzSfRIyEiH.png) 
</text>
<text>
  ![Image description]( 0eA0SaTj8d90aHrs72rC.jpg ) 
</text>`;
var res = [];

while ((m = regex.exec(str)) !== null) {
  res.push(m[1]);
}
console.log(res);
&#13;
&#13;
&#13;