超好用的正则表达式在线测试工具,以及关于正则表达式中零宽断言的理解

关于正则表达式各种字符的含义运用可见菜鸟教程 点击看文档

  • 测试工具分享https://regex101.com/
    基本的快速判断表达式是否合法不用多做说明
    亮点示例:匹配邮箱格式的字符串,表达式的关联部分高亮,并且hover在上面可以看到各处字符的用途
    更棒的是右侧有详细解析,分析该正则表达式!
    超好用的正则表达式在线测试工具,以及关于正则表达式中零宽断言的理解
  • 帮助理解正则表达式的路线图生成工具:https://regexper.com/
    超好用的正则表达式在线测试工具,以及关于正则表达式中零宽断言的理解

关于 肯定|否定预查(零宽断言)

零宽断言表示的只是匹配的位置

基本用法
  • /(?=bar)/ 预查(零宽断言)右侧紧跟’bar’
    超好用的正则表达式在线测试工具,以及关于正则表达式中零宽断言的理解
  • /(?!a)/ 断言位置右侧不紧跟’a’
    超好用的正则表达式在线测试工具,以及关于正则表达式中零宽断言的理解
  • /(?<=bar)/ 断言的位置的左边紧跟’bar’
    超好用的正则表达式在线测试工具,以及关于正则表达式中零宽断言的理解
  • /(?<!a)/ 断言的某个位置左边不紧跟’a’
    超好用的正则表达式在线测试工具,以及关于正则表达式中零宽断言的理解
    详细说明
    超好用的正则表达式在线测试工具,以及关于正则表达式中零宽断言的理解

其实^ $ \b都是零宽断言的特殊形式

将它们化为一般形式(?=XXX)如下
^ === (?<!.) 表示在开始断言
$ === (?!.) 表示在结尾断言
\b === (?=\w)(?<!\w)|(?<=\w)(?!\w) 单词边界,表示预查每个英文单词

实践例子:密码规则匹配

规则:
密码长度为8-10
允许出现任何字符,但是其中必须含有:至少1个数字、至少1个小写字母、至少1个大写字母

表达式 :/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$/
如下图,通过工具可以把表达式的关联字符及大致用意直接在工具中读出来。
超好用的正则表达式在线测试工具,以及关于正则表达式中零宽断言的理解
这个表达式通过^.{8,10}$限定了密码长度(匹配8至10次,尽可能多地匹配,并根据需要返回)
其中有三个正向先行断言(positive lookahead)
每个正向先行断言中都存在贪婪匹配 .* 表示匹配条件字符出现为1次或多次
再以(?=.*\d)为例子某位置右侧含有若干数字的都会进行匹配。