我最初有一个看起来像这样的函数:
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: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>
正如我在评论中提到的,用正则表达式解析 HTML 总是会得到很多反对票和批评(大部分是合理的),所以你在做之前应该三思而后行。但对于某些情况,它可能是一个有效的解决方案。
您的具体问题是贪婪.*
匹配所有从第一个img
到最后一个。将其更改为非贪婪的.*?
, 就可以解决问题。
为了使它不那么容易受到攻击,您可以将其更改为[^"]*?
,从而仅匹配非引号。
但它仍然无法接近 100% 的解决方案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句