正则的扩展
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"