我正在尝试在我的项目中搜索<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>
只有最后两个超链接应该匹配我的搜索。
请注意,您的答案不匹配:
<a alt="href"></a>
<a style"newhref"></a>
例如。演示和解释
我会使用Tempered Greedy Pattern:
<a(?:(?!\bhref=)[^>])*>
演示和解释
结果我在输入我的问题时发现了我做错了什么。
.*?
不起作用的原因是因为它在负前瞻之前一直在无休止地匹配。通过.*?
进入负前瞻,我设法使其工作:在否定前瞻中包含零个或多个量词使其成为我不想匹配的文本的一部分,而不是在否定前瞻可以到达之前匹配文本。感谢 Toto 提醒我添加一个
=
,所以我不会忽略包含“href”的属性值!