RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1610952
Accepted
alexWithoutBeard
alexWithoutBeard
Asked:2025-04-28 20:34:32 +0000 UTC2025-04-28 20:34:32 +0000 UTC 2025-04-28 20:34:32 +0000 UTC

使用函数,从有效的 html 代码中获取所有 src 图像

  • 772

有必要实现 getSrc(),它接收一段有效的(即没有错误编写的)html 代码作为输入,该代码可以包含多个图像。获取图像的src属性的值。该属性可以用单引号或双引号引起来,例如,src="test.png", src='test.png'。

src 返回字符串

我得到以下信息:

function getSrc(html) {
  let str = html.toLowerCase();
  let pos = 0;
  let res = ''
  let k = str.indexOf('<img ');
  let src = str.indexOf("src=", k);
  while (str.indexOf('<img ', pos + 1) != -1) {
    let open =
      str.indexOf('"', src) != -1 ?
      str.indexOf('"', src) :
      str.indexOf("'", src);
    let close =
      str.indexOf('"', open + 1) != -1 ?
      str.indexOf('"', open + 1) :
      str.indexOf("'", open + 1);
    pos += close;
    res += str.slice(open + 1, close) + ' ';

  }

  return res

}

getSrc('<table><tr><td><img width="200" src="google.jpg"></td></tr><tr><td><img width="200" src='
  chrome.jpg '></td></tr><tr><td><img width="200" src="safari.jpg"></td></tr><tr><td><img width="200" src="edge.jpg"></td></tr></table>')

它应该输出:google.jpg chrome.jpg safari.jpg edge.jpg。我得到:google.jpg google.jpg google.jpg google.jpg

我明白错误在于我将相同的 src 传递给 while,但如何修复它......有趣的是我在 React 中编写组件,但我被这个困住了)

javascript
  • 2 2 个回答
  • 48 Views

2 个回答

  • Voted
  1. Best Answer
    ksa
    2025-04-28T21:43:21Z2025-04-28T21:43:21Z

    使用函数,从有效的 html 代码中获取所有 src 图像

    我会建议这个选项...

    const getSrc = html => html.match(/(?<=src=["'])[^'"]+/g)
    
    const v = `<table><tr><td><img width="200" src="google.jpg"></td></tr><tr><td><img width="200" src='chrome.jpg'></td></tr><tr><td><img width="200" src="safari.jpg"></td></tr><tr><td><img width="200" src="edge.jpg"></td></tr></table>`
    console.log(getSrc(v))

    这里有循环……

    const getSrc = html => {
      const parser = new DOMParser()
      const doc = parser.parseFromString(html, "text/html")
      return [...doc.querySelectorAll('img')].map(o => o.getAttribute('src'))
    }
    
    const v = `<table><tr><td><img width="200" src="google.jpg"></td></tr><tr><td><img width="200" src='chrome.jpg'></td></tr><tr><td><img width="200" src="safari.jpg"></td></tr><tr><td><img width="200" src="edge.jpg"></td></tr></table>`
    console.log(getSrc(v))

    这里有while...

    const getSrc = html => {
        const a = []
        let i = -1
        do {
            i = html.indexOf('<img', ++i)
            if (~i) {
                let j = html.indexOf('src=', i) + 4
                const v = html[j]
                const k = html.indexOf(v, ++j)
                const s = html.substring(j, k)
                a.push(s)
            }
        } while (~i)
        return a
    }
    
    const v = `<table><tr><td><img width="200" src="google.jpg"></td></tr><tr><td><img width="200" src='chrome.jpg'></td></tr><tr><td><img width="200" src="safari.jpg"></td></tr><tr><td><img width="200" src="edge.jpg"></td></tr></table>`
    console.log(getSrc(v))

    • 1
  2. CrazyElf
    2025-04-28T21:27:42Z2025-04-28T21:27:42Z

    好吧,如果不多想的话,那么显然,搜索需要移到循环内部img并src从以下位置进行pos:

      while (str.indexOf('<img ', pos + 1) != -1) {
          let k = str.indexOf('<img ', pos + 1);
          let src = str.indexOf("src=", k);
    

    这确实会导致重复搜索img,但我对 JS 不够了解,无法编写正常的“有条件退出的无限循环”。

    附言:完整代码:

    function getSrc(html) {
      let str = html.toLowerCase();
      let pos = 0;
      let res = ''
      while (str.indexOf('<img ', pos + 1) != -1) {
        let k = str.indexOf('<img ', pos + 1);
        let src = str.indexOf("src=", k);
        let open =
          str.indexOf('"', src) != -1 ?
          str.indexOf('"', src) :
          str.indexOf("'", src);
        let close =
          str.indexOf('"', open + 1) != -1 ?
          str.indexOf('"', open + 1) :
          str.indexOf("'", open + 1);
        pos += close;
        res += str.slice(open + 1, close) + ' ';
    
      }
    
      return res
    
    }
    
    console.log(getSrc('<table><tr><td><img width="200" src="google.jpg"></td></tr><tr><td><img width="200" src="chrome.jpg"></td></tr><tr><td><img width="200" src="safari.jpg"></td></tr><tr><td><img width="200" src="edge.jpg"></td></tr></table>'))

    • 0

相关问题

  • 第二个 Instagram 按钮的 CSS 属性

  • 由于模糊,内容不可见

  • 弹出队列。消息显示不正确

  • 是否可以在 for 循环中插入提示?

  • 如何将 JSON 请求中的信息输出到数据表 Vuetify vue.js?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5