一个正则表达式问题

前端之家收集整理的这篇文章主要介绍了一个正则表达式问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

(?:(\w+\.){0,1})(\b(?!www\b)\w+)\.\b(?!(com|org|gov|net|cn)\b)\w+.\w+
一个网友问的问题,稍微有点复杂。
主要其实就是?: 和?!


?:是一个group construct,组构造。
参与匹配是肯定的,但是不会参与组计数。
也就是也许后续你可能会用\1\2来表示某个group时(?:)中的这一块将无法被引用到。同时也看到这个组的官方术语是non-capturing group。很多代码在进行匹配成功后,是能通过\$1,\$2代码逻辑中被引用的,所以你引用的序号自然就需要把non-capturing group排除掉。比如:

if (#host ~* "(?:(\w+.){0,1})(\b(?!www\b)\w+).\b(?!(com|org|gov|net|cn)\b)\w+.\w+" ) {
set #subdomain "/$2"
}


其实(?!)的含义也是group,只是含义刚好相反,不能是某个字串。
单个字符有取反[^abc]
但是(?!abc)有点特殊的是,一般都需要前面有东西匹配到。
比如looks(?!good)就不能匹配”looksgood”中的”looks”。
如果只是写(?!good) 不会匹配到任何字符串。
同样不允许匹配的字串可以有多个:
iam(?!looks|good)就不能匹配到”iamlooksgood”中的iam。

猜你在找的正则表达式相关文章