?! 是什么意思?

66

在以下正则表达式中,?!是什么意思?

new RegExp('http:\/\/(?!' + location.hostname + ')')
3个回答

91

这是一个负向先行断言,这意味着为了匹配表达式,(?!...) 内的部分必须不匹配。在本例中,正则表达式仅在http://后面不跟当前主机名(大致如此,请参见Thilo的评论)时匹配。


+1或者,由于缺乏适当的转义,只有在其后面不跟类似于主机名的内容,并且点被可接受的东西替换时才能使用。 - Thilo
1
确实,这在大多数情况下可能不会有太大的区别。然而,考虑到最近的Stripe CTF比赛,这样的疏忽可能很难被发现,并可能允许一些未预期的事情发生;-) - Joey
1
没关系,只是多年修复注入漏洞的经验让我现在更加关注这些问题... - Thilo
1
此答案已添加到Stack Overflow正则表达式FAQ,位于“环视”一节下。 - aliteralmind

6

这是一个负向先行断言,可以在 这里 查看更多信息。


0

这是一个环顾四周的过程。

location.hostname 不应跟随 http:\/\/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接