我正在尝试在我的项目中搜索<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
答案2
事实证明,当我输入问题时我才意识到我做错了什么。
之所以.*?
不起作用,是因为它在负向前瞻之前一直不断匹配。通过进入.*?
负向前瞻,我设法让它起作用了:
<a (?!.*?href=).*?>
在负向前瞻中包含零或多个量词使其成为文本的一部分不想要匹配,但又不想在负向前瞻到达之前匹配文本。感谢 Toto 提醒我添加,=
这样我就不会忽略包含“href”的属性值!