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

时间:2018-05-14 11:52:08

标签: javascript regex

我最初有一个看起来像这样的功能:

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

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

<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>

1 个答案:

答案 0 :(得分:1)

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

您的具体问题是,贪婪的.*会匹配从第一个img到最后一个.*?的所有内容。将它改为非贪婪的[^"]*?,就可以了。

为了使它更容易受到攻击,您可以将其更改为transform,从而仅匹配非引号。

但它仍然没有接近100%的解决方案。