我正致力于提取以xmls链接的图像文件名,这些文件名链接如下
<text>
![Image description](iuiFE240H-dM_2DAHpuRxt.jpg)
</text>
<text>
![Image description](9u0I7ExVD0bzSfRIyEiH.png)
</text>
<text>
![Image description]( 0eA0SaTj8d90aHrs72rC.jpg )
</text>
请注意图像文件名有时可能在a之后(有时在空白之后)开始。图像是jpg或png。另请注意,在第一个图像中,在文件名中使用了下划线和短划线。有关此正则表达式的任何帮助我会非常感激。我编写了一个函数,它循环遍历文件的字符串版本以提取图像,但它看起来非常混乱。
答案 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)
- jpg
或jpeg
或png
/i
- 启用不区分大小写的匹配/g
- 启用全局修改器以匹配多次出现。
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;