正则的扩展

y修饰符

y修饰符,叫做“粘连”(sticky)修饰符

g修饰符,y修饰符的特点

g修饰符是从头匹配,匹配里是否含有规则相关的,注意:如有aba,匹配第一个a的时候,匹配第二次,就匹配剩余的a.

y修饰符是从头匹配,不过必须的一定要头部匹配成功,否则就返回null,相当于/^a/.

 

lastIndex属性指定每次搜索的开始位置

index为匹配的位置

RegExp.prototype.sticky 属性

y修饰符相匹配,ES6 的正则实例对象多了sticky属性,表示是否设置了y修饰符。

var r = /hello\d/y;
r.sticky // true


 RegExp.prototype.flags属性

返回正在表达式的修饰符

// ES5 的 source 属性
// 返回正则表达式的正文
/abc/ig.source
// "abc"

// ES6 的 flags 属性
// 返回正则表达式的修饰符
/abc/ig.flags
// 'gi'

S修饰符:dotAll模式
主要匹配能行终止符
如\n,\r
fotAll属性,返回一个布尔值,判断该正在是否存在dotAll模式

后行断言
“先行断言”指的是,x只有在y前面才匹配,
‘先行否定断言’,x下只有不在y前面才匹配
‘后行断言’x只有y后面才匹配
‘后行否定断言’x只有不在后面才匹配

Unicode属性类
Es2018引入了一种新的类的写法\p{...}和\P{...},根据花括号写的Unicode某种属性,去匹配字符。
\P{…}\p{…}的反向匹配,即匹配不满足条件的字符。

具名匹配
正常的组匹配

const RE_DATE = /(\d{4})-(\d{2})-(\d{2})/;

const matchObj = RE_DATE.exec('1999-12-31');

const year = matchObj[1]; // 1999
const month = matchObj[2]; // 12
const day = matchObj[3]; // 31

ES2018引入了具名组匹配,给他加个名字,通过group属性点名字访问
模式的头部添加“问号 + 尖括号 + 组名”
const RE_DATE = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/;

const matchObj = RE_DATE.exec('1999-12-31');
const year = matchObj.groups.year; // "1999"
const month = matchObj.groups.month; // "12"
const day = matchObj.groups.day; // "31"






 



 

 

posted @ 2021-03-13 23:39  不想飞的小鸟  阅读(78)  评论(0编辑  收藏  举报