记录一下常用又常忘的正则环视。
1. 引言
正则表达式,通常用来表示一种匹配规则,搜索出匹配的字符串,然后对该字符串做一些操作。环视,是正则表达式式中的一种语法,它用来判断字符,但是不占位置。还有种叫法,叫断言。
2. 类型
它分为先行(lookahead)和后行(lookbehind),以及正向(positive)和逆向(negative),先行后行的意思是判断前面的位置还是后面的位置,正向和逆向的意思是判断是或者不是,两两组和就有了四种类型。
正则表达式引擎会从前向后扫描字符串,检查指针还未曾达到的地方,就叫做先行,即检查右边的字符,检查已经扫的字符时,叫做后行,即指针左侧的字符,这是先行和后行的由来。
- (?=pattern) 正向先行,检查右侧相等
- (?!pattern) 负向先行,检查右侧不想等
- (?<=pattern) 正向后行,检查左侧相等
- (?<!pattern) 负向后行,检查左侧相等
3. 举例
举几个例子,用下面的字符串
1 | 12abc34 56abc78 |
先行,正向(右侧相等),比如,想要匹配abc,并且只配置右侧是34的abc
1
abc(?=34)
这样便可以匹配到第一个abc,注意没有后面的34,因为断言不占位置,它只是对匹配内容的一种限制
先行,逆向(右侧不相等),比如,匹配abc,但是不想要后面是34的abc
1
abc(?!34)
最后的结果是,匹配到了后面的abc
后行,正向(左侧相等),比如,还是匹配abc,想要左侧是12的abc
1
(?<=12)abc
匹配到了前面的abc,同样只是abc,不包含12
后行,逆向(左侧不相等),比如,依然还是abc,这次不想要左侧是12的abc
1
(?<!12)abc
这样就匹配到了后面的abc
4. 在线工具
推荐两个直观的在线校验工具,写完的放到上面,很直观的就知道是不是自己想要的了
- regexr
- regex-vis
另外,经regexr友情提醒,不是所有的浏览器都支持后行逆向,但是有哪些浏览器它没说,所以要谨慎使用。