1、如果RegExp
构造函数第一个参数是一个正则对象,那么可以使用第二个参数指定修饰符。而且,返回的正则表达式会忽略原有的正则表达式的修饰符,只使用新指定的修饰符。
new RegExp(/abc/ig, 'i').flags // "i"
2、字符串对象共有 4 个方法,可以使用正则表达式:match()
、replace()
、search()
和split()
。ES6 将这 4 个方法,在语言内部全部调用RegExp
的实例方法,从而做到所有与正则相关的方法,全都定义在RegExp
对象上。
String.prototype.match 调用 RegExp.prototype[Symbol.match]
String.prototype.replace 调用 RegExp.prototype[Symbol.replace]
String.prototype.search 调用 RegExp.prototype[Symbol.search]
String.prototype.split 调用 RegExp.prototype[Symbol.split]
3、ES6 对正则表达式添加了u
修饰符,含义为“Unicode 模式”,用来正确处理大于\uFFFF
的 Unicode 字符。
4、RegExp.prototype.unicode 属性:正则实例对象新增unicode
属性,表示是否设置了u
修饰符。
5、ES6 还为正则表达式添加了y
修饰符,叫做“粘连”(sticky)修饰符。与g
修饰符类似,但它确保匹配必须从剩余的第一个位置开始,这也就是“粘连”的涵义。实际上,y
修饰符号隐含了头部匹配的标志^,
y
修饰符的设计本意,就是让头部匹配的标志^
在全局匹配中都有效。单单一个y
修饰符对match
方法,只能返回第一个匹配,必须与g
修饰符联用,才能返回所有匹配。
6、RegExp.prototype.sticky 属性:实例对象新增sticky
属性,表示是否设置了y
修饰符
7、RegExp.prototype.flags 属性:返回正则表达式的修饰符
8、ES2018 引入了s
修饰符,使得.
可以匹配任意单个字符,这被称为dotAll
模式,即点(dot)代表一切字符。
9、正则表达式还引入了一个dotAll
属性,返回一个布尔值,表示该正则表达式是否处在dotAll
模式
10、ES2018 引入了一种新的类的写法\p{...}
和\P{...}
,允许正则表达式匹配符合 Unicode 某种属性的所有字符。
11、ES2018 引入了具名组匹配(Named Capture Groups),允许为每一个组匹配指定一个名字,既便于阅读代码,又便于引用。
12、String.prototype.matchAll:可以一次性取出所有匹配。不过,它返回的是一个遍历器(Iterator),而不是数组。