正则系列之断言Assertions


断言的组成之一是边界。对于文本、词或模式,边界可以用来表明它们的起始或终止部分(如向前断言,向后断言以及条件表达式)。

1、边界类断言

1.1、^

匹配输入的开头。如果多行模式设为 true,^换行符后也能立即匹配。

let reg = /^1[3-9]\d{9}/gm;
let str = "25000000000";
reg.test(str); // false
str = "15000000000\n17000000000";
let found = str.match(reg); // ['15000000000', '17000000000']

1.2、$

匹配输入的结束。如果多行模式设为 true,$换行符前也能立即匹配。

let reg = /^1[3-9]\d{9}7$/gm;
let str = "25000000000";
reg.test(str); // false
str = "15000000000\n170000000007";
let found = str.match(reg); // ['170000000007']

1.3、\b

匹配一个单词的边界(边界包括换行符和空格),这是一个字的字符前 / 后没有另一个字的字符位置。

let reg = /\bm/gm;
let str = "month\nmoom";
str.match(reg); // ['m', 'm']
reg = /th\b/gm;
str = "month\nthird";
str.match(reg); // ['th']
str = "month\nsomething";
str.match(reg); // ['th']
str = "month  ufo";
str.match(reg); // ['th']

1.4、\B

匹配非单词边界。

let reg = /on\B/gm;
let str = "at noon";
str.match(reg); // null
str = "noon noon\nnoon";
str.match(reg); // null
str = "ongoing";
str.match(reg); // ['on']

2、其他断言

2.1、x(?=y)

向前断言: x 被 y 紧随时匹配 x,结果不包括 y。

let reg = /\d(?=y)/g;
let str = "1y2y3";
str.match(reg); // ['1', '2']

2.2、x(?!y)

向前否定断言: x 没有被 y 紧随时匹配 x。

let reg = /\d(?!y)/g;
let str = "1y2y3";
str.match(reg); // ['3']

2.3、(?<=y)x

向后断言: x 跟随 y 的情况下匹配 x,结果不包括 y。

let reg = /(?<=y)\d/g;
let str = "y1y23";
str.match(reg); // ['1', '2']

2.4、(?<!y)x

向后否定断言: x 不跟随 y 时匹配 x。

let reg = /(?<!y)\d/g;
let str = "y1y23";
str.match(reg); // ['3']

后记

如果你感觉文章不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果你觉得该文章有一点点用处,可以给作者点个赞;\\*^o^*//
如果你想要和作者一起进步,可以微信扫描二维码,关注前端老L~~~///(^v^)\\\~~~
谢谢各位读者们啦(^_^)∠※!!!

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_62277266/article/details/125534557