正则表达式 ?= ?! 和 ?:

我们先来看 ?= 和 ?! ,它们的作用如下:

?= n 匹配任何其后紧接指定字符串 n 的字符串。
?! n 匹配任何其后没有紧接指定字符串 n 的字符串。

零宽断言是一种零宽度的匹配,它匹配的内容不会保存到匹配结果中,也不会占用index宽度,最终匹配的结果只是一个位置。

零宽断言分为四类

  • 正向零宽先行断言(前瞻)
    exp1(?=exp2)          匹配exp2前面的exp1
  • 负向零宽先行断言(负前瞻)
    exp1(?!exp2)           匹配后面不是exp2的exp1
  • 正向零宽后发断言(后瞻)
    (?<=exp2)exp1        匹配exp2后面的exp1
  • 负向零宽后发断言(负后瞻)
    (?

“JavaScript仅支持零宽先行断言,不支持零宽后发断言。”  我查了一些文章,发现差不多都是这样说的,但我在试的时候发现JS好像支持零宽后发断言。

正则表达式 ?= ?! 和 ?:_第1张图片

而 ?: 和非捕获分组的概念有关。

  • 捕获分组

    ()表示捕获分组,()会把每个分组里的匹配的值保存起来,使用$n(n是一个数字,表示第n个捕获组的内容)

  • 非捕获分组

    (?:)表示非捕获分组,和捕获分组唯一的区别在于,非捕获分组匹配的值不会保存起来

关于它们的使用,可以看一下 正则表达式 - 千位分隔符

相关阅读:

javascript正则表达式  有关js正则的文章,总结的挺好。

【正则表达式系列】零宽断言  零宽断言的介绍及一些示例。

 

你可能感兴趣的:(JavaScript,前端)