oynix

于无声处听惊雷,于无色处见繁花

正则环视

记录一下常用又常忘的正则环视。

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友情提醒,不是所有的浏览器都支持后行逆向,但是有哪些浏览器它没说,所以要谨慎使用。

------------- (完) -------------
  • 本文作者: oynix
  • 本文链接: https://oynix.com/2022/04/5a42b1e87487/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

欢迎关注我的其它发布渠道