使用regular-expression从凌乱的html代码中获取一个地址数组

时间:2017-09-29 07:10:00

标签: javascript regex

例如,如果我得到(var a,请说):

<img src="http://123.com/1>2.png" />
<img src=`https://321.com/2<3.png` / >
<img src=//123.com/http.png>
<img src=321.com/http.png /   >

从数据库然后我尝试创建一个库来显示所有这些,首先使它们成为一个数组:

['http://123.com/1>2.png','https://321.com/2<3.png','//123.com/http.png','321.com/http.png']

以下是我的尝试:

a.match(/<img[^>]*src=['"`]?([^>]+)/gi).join(',').replace(/src=|['"`]|\s|\//g,"").split(",")

2 个答案:

答案 0 :(得分:0)

这适用于您的具体示例。如果它适用于您的所有网址......谁知道;)

<img.*?src\s*=\s*(?:(['"`])((?:(?!\1).)*)|((?:(?!\s*\/\s*>)[^>])*)).*

网址位于捕获组2 3。

var re = /<img.*?src\s*=\s*(?:(['"`])((?:(?!\1).)*)|((?:(?!\s*\/\s*>)[^>])*)).*/,
    tags = [
      '<img src="http://123.com/1>2.png" />',
      '<img src=`https://321.com/2<3.png` / >',
      '<img src=//123.com/http.png>',
      '<img src=321.com/http.png /   >'
    ];
      

    tags.forEach(function(tag) {
        var res = tag.match(re);
        console.log(res[2] || res[3]);
    });

See it here at regex101

答案 1 :(得分:0)

也许创建一个“虚拟”img DOM元素,然后从中提取src?

类似的东西:

(function (window, document, $, undefined) {
    'use strict';

    $(document).ready(function () {
        $('#myLink').trigger("click");
    });

})(window, document, jQuery);