使用正则表达式查找没有 href 属性的锚 HTML 元素

使用正则表达式查找没有 href 属性的锚 HTML 元素

我正在尝试在我的项目中搜索<a>缺少其href属性的元素,并使用正则表达式来匹配我正在寻找的结果。

我首先尝试了以下表达式:/<a (?!href).*?>/这对很多元素都有效,但只要 href 不是第一个属性,就会失败。然后我尝试了,<a .*?(?!href).*?>但这也失败了,因为尽管添加了以确保是懒惰的,.*?但表达式还是太贪婪了。?*

我错过了什么?我使用的测试集如下:

<a href=""></a>
<a href=""" data-toggle="tab" ></a>
<a data-toggle="tab" href="foobar"></a>
<a data-toggle="tab" type=""asdf>test</a>
<a test="test"></a>

仅最后两个超链接符合我的搜索。

答案1

请注意,您的答案不匹配:

  • <a alt="href"></a>
  • <a style"newhref"></a> 例如。

演示与说明

我会用缓和贪婪模式

<a(?:(?!\bhref=)[^>])*>

演示与说明

答案2

事实证明,当我输入问题时我才意识到我做错了什么。

之所以.*?不起作用,是因为它在负向前瞻之前一直不断匹配。通过进入.*?负向前瞻,我设法让它起作用了:

<a (?!.*?href=).*?>

在负向前瞻中包含零或多个量词使其成为文本的一部分想要匹配,但又不想在负向前瞻到达之前匹配文本。感谢 Toto 提醒我添加,=这样我就不会忽略包含“href”的属性值!

相关内容