我最初有一个看起来像这样的功能:
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: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: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: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:5px;" /><b>
</p>
</div>
答案 0 :(得分:1)
正如我在评论中所提到的,使用正则表达式解析HTML总是会得到很多投票和批评(大多数都是合理的),所以在做之前你应该三思而后行。在某些情况下,它可能是一个有效的解决方案。
您的具体问题是,贪婪的.*
会匹配从第一个img
到最后一个.*?
的所有内容。将它改为非贪婪的[^"]*?
,就可以了。
为了使它更容易受到攻击,您可以将其更改为transform
,从而仅匹配非引号。
但它仍然没有接近100%的解决方案。