JS:将所有 img src 相对 url 替换为绝对

罗德尼·沃姆斯贝彻

我最初有一个看起来像这样的函数:

url = url.replace(new RegExp("img src=\"/", 'g'), "img src=\"" + config.baseSPDomain + "/");

它工作得很好,但是当有人在 img 标签后面写上“alt”altribute时它就坏了。例如:

<img alt="test" img="/test.jpg" />

所以我重新编写了我的正则表达式来处理这种情况。我用以下代码替换了它:

  url = url.replace(new RegExp("<img(.*)src=\"", 'g'), "<img src=\"" + config.baseSPDomain + "/");

这很好用,但不知何故它截断了字符串的其余部分。同时我不知道为什么。

下面是示例输入

旧网址:解析前

<div class="ExternalClassA32A15F1FF86483AAF71DA3710DFEFCF">
  <p>​</p>
  <p>dit is een image zonder alt<br></p>
  <p>
    <img src="/sites/Nieuwsportaal/PublishingImages/hall-of-fame.png" alt="" style="margin&#58;5px;" />
    <br>
  </p>
  <p>
    <br>
  </p>
  <p>dit is een image met alt
    <br>
  </p>
  <p>
    <img src="/sites/Nieuwsportaal/PublishingImages/Nieuwsberichten/Barcelona%20beach.jpg" alt="Barcelona beach.jpg" style="margin&#58;5px;" /><br>
  </p>
  <p><br>
  </p>
  <p><br>
  </p>
  <p>dit is een image met alt<br>
  </p>
  <p>
    <img src="/sites/Nieuwsportaal/PublishingImages/Nieuwsberichten/app1.jpg" alt="app1.jpg" style="margin&#58;5px;" /><br>
  </p>
</div>

新网址:解析后

<div class="ExternalClassA32A15F1FF86483AAF71DA3710DFEFCF">
  <p>​</p>
  <p>dit is een image zonder alt<br>
  </p>
  <p>
    <img src="https://one365dev2.sharepoint.com//sites/Nieuwsportaal/PublishingImages/Nieuwsberichten/app1.jpg" alt="app1.jpg" style="margin&#58;5px;" /><b>
  </p>
</div>
三焕

正如我在评论中提到的,用正则表达式解析 HTML 总是会得到很多反对票和批评(大部分是合理的),所以你在做之前应该三思而后行。但对于某些情况,它可能是一个有效的解决方案。

您的具体问题是贪婪.*匹配所有从第一个img到最后一个。将其更改为非贪婪的.*?, 就可以解决问题。

为了使它不那么容易受到攻击,您可以将其更改为[^"]*?,从而仅匹配非引号。

但它仍然无法接近 100% 的解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章