正则表达式中的边界字符
在正则中有时需要强制匹配整个字符串,可以使用 ^ 和 $ 标记。
^ 表示字符串的起始位置
$ 表示字符串的结束位置
/^\d+$/ 可以匹配整个有一个或者多个数字组成的字符串。
/^!/ 可以匹配任意以!开头的字符串
那么反过来 /!^/ 不会匹配任何字符串
\b
在很多时候需要起始结束位置在单词边界上,可以使用 \b 标记。 单词边界指的是起始和结束位置都是单词字符,而起始位置的前一个字符以及结束位置的后一个字符不是单词字符。
零宽断言
简单说就是没有宽度,只匹配位置,不匹配内容,^、$、\b 都是。
自定义零宽断言
(?=exp) 正预测先行断言 positive lookahead,即要求一个位置的右边的内容要满足expr
(?!expr) 负预测先行断言 negative lookahead,即要求一个位置的右边的内容不能满足expr
下面就是若要匹配成功在a的右侧不能出现所示的条件
(?<=expr) 正回顾后发断言 positive lookbehind,即要求一个位置的左边的内容要满足expr
(?<!expr) 负回顾后发断言 negative lookbehind,即要求一个位置的左边的内容不能满足expr
\b === (?<!\w)(?=\w)|(?<=\w)(?!\w)
^ === (?<!.) 左右不能出现任何符号
$ === (?!.) 或 (?![^])
具名分组
在一些情况下希望给分组中添加一个名字进行索引,使得可以更加直观快捷的获取分组。
在es6中, 已经提供具名分组功能,具名分组结果放在groups属性里面。
使用方法是在分组小括号中开头中添加 ?<分组名字> 分组名只能使用字母开头
非捕获分组
在分组小括号中开头使用 ?: 表示该分组即不会被计算也不会被捕获
而直接使用 (?:) 表示这个不会匹配任何内容,也不会计算,相当于完全不存在。
反向引用
即将前一次匹配的分组内容在一次进行匹配即
在此例子中将匹配到的 o 为条件在向后进行一次匹配 \1 代表进行一次 \2 代表两次 以此类推