1.Regex构造函数:
当第一个参数为正则表达式时,允许传递正则表达式修饰符作为第二个参数。并且,返回的正则表达式会忽略原有的修饰符,使用指定的修饰符。
2.修饰符:
- u修饰符:用来正确处理大于\uFFFF的unicode字符。
- y修饰符:与g修饰符类似,也是全局匹配,后一次匹配都从上一次匹配成功的下一个位置开始。不同之处在于,g修饰符只要剩余位置中存在匹配就可,而y修饰符确保匹配必须从剩余的第一个位置开始。
- s修饰符(dotAll模式):使得.可以匹配任意单个字符(包括换行符和回车符)。
3.属性:
- sticky属性:表示是否设置了y修饰符。
- flags属性:返回正则表达式的修饰符。
4.先行断言和后行断言:(括号中的部分不计入结果)
- 先行断言: x只有在y前面才匹配,写法:/x(?=y)/
- 先行否定断言:x只有不在y前面才匹配,写法:/x(?!y)/
- 后行断言: x只有在y后面才匹配,写法:/(?<=y)x/
- 后行否定断言:x只有不在y后面才匹配,写法:/(?
5.unicode属性类:
允许正则表达式匹配符合 Unicode 某种属性的所有字符,写法:\p{…}和\P{…}
\P{…}是\p{…}的反向匹配,即匹配不满足条件的字符。
const regexGreekSymbol = /\p{Script=Greek}/u;
regexGreekSymbol.test(‘π’) // true
6.具名组匹配:
允许为每一个组匹配指定一个名字,既便于阅读代码,又便于引用。
const RE_DATE = /(?\d{4})-(?\d{2})-(?\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
7.String.prototype.matchAll:
一次性取出所有匹配。不过,它返回的是一个遍历器(Iterator),而不是数组。可以用for…of循环取出。
遍历器转为数组是非常简单的,使用…运算符和Array.from方法就可以了。