【问题标题】:java script regex .match find only one resultjavascript regex .match 只找到一个结果
【发布时间】:2012-04-09 16:20:28
【问题描述】:

我有这个js代码:

result = subject.match(/<a.*class="gallery_browser_thumbnail".*href="(.+)">/i);

我想在一个 html 源代码中获取多个 a 标签的 href 但它只显示 1 个结果

如果我在模式末尾使用 /g,它会返回整个模式,但我只想要 href 部分 我的意思是 -> (.+) 这部分

这就是我捕获 html 输入的方式:

var subject = String(document
.getElementsByTagName("body")[0].innerHTML);

有什么帮助吗?

最终的工作脚本:

    var subject = String(document.getElementsByTagName("body")[0].innerHTML);
var regex = /<a.*class="gallery_browser_thumbnail".*href="(.+)">/gi;
var matched = null;
while (matched = regex.exec(subject)) {
  alert(matched[1]);
}

【问题讨论】:

    标签: javascript regex html-parsing


    【解决方案1】:

    您可以使用 exec 来测试 RegExp。像这样的:

    var subject = String(document.getElementsByTagName("body")[0].innerHTML),
        regexp = /<a.*class="gallery_browser_thumbnail".*href="(.+)">/gi, //g for global match
        match = regexp.exec(subject),
        result = [];
    while(match != null){
        result.push(match[1]); // the second value is matched group
        match = regexp.exec(subject);
    }
    

    【讨论】:

    • 您的代码无法正常工作,出现错误:TypeError: match is null
    • @SinaMiandashti,你是对的。与第 6 行交换它。我已经修改了答案。
    【解决方案2】:

    通过添加惰性量词?更改为惰性匹配:

    result = subject.match(/<a.*?class="gallery_browser_thumbnail".*?href="(.+?)">/i);
    

    【讨论】:

    • 我得到了这个:["", "", "
    • 但我想要这个:["media/catalog/product/d/s/dsc_0464.jpg" , "media/catalog/product/d/s/dsc_0464.jpg", "media/catalog /product/d/s/dsc_0464.jpg"] ...]
    • 我需要全局匹配 + 只有 href 部分
    猜你喜欢
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多