gpt4 book ai didi

html - 编码 HTML 的正则表达式

转载 作者:行者123 更新时间:2023-11-27 22:52:19 24 4
gpt4 key购买 nike

我想创建一个匹配开头 <a> 的正则表达式仅包含 href 属性的标签:

<a href="doesntmatter.com">

应该匹配上面的,但添加其他属性时不匹配:

<a href="doesntmatter.com" onmouseover="alert('Do something evil with Javascript')">

通常这很容易,但 HTML 是经过编码的。所以对以上两者进行编码,我需要正则表达式来匹配这个:

&#60;a href&#61;&#34;doesntmatter.com&#34; &#62;

但不匹配这个:

&#60;a href&#61;&#34;doesntmatter.com&#34; onmouseover&#61;&#34;alert&#40;&#39;do something evil with javascript.&#39;&#41;&#34; &#62;

假设所有编码的 HTML 都是“有效的”(没有奇怪的畸形 XSS 欺骗)并假设我们不需要遵循任何 HTML 清理最佳实践。我只需要最简单的正则表达式来匹配上面的 A) 但不匹配 B)。

谢谢!

最佳答案

首先想到的正则表达式是/<a href=".*?">/ ;惰性表达式 (.*?) 可用于匹配引号之间的字符串。但是,正如评论中指出的那样,因为正则表达式由 > 锚定,所以它也会匹配无效标记,因为仍然会进行匹配。

为了解决这个问题,你可以使用atomic grouping .原子分组告诉正则表达式引擎,“一旦你找到了这个组的匹配项,就接受它”——这将解决正则表达式在没有找到 href 的 > a 结尾后返回并匹配第二个字符串的问题.带有原子组的正则表达式如下所示:

/<a (?>href=".*?")>/

用 HTML 实体替换字符时看起来像下面这样:

/&#60;a (?>href&#61;&#34;.*?&#34;)&#62;/

关于html - 编码 HTML 的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1143351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com