1 RegExp组织函数
ES6 许可RegExp组织函数接收正则表达式作为参数。第二个参数指定润饰符,假如存在则运用指定的润饰符。
var regexp = new RegExp(/xyz/i, "ig");
console.log(regexp.flags); //gi
2 字符串的正则要领
字符串对象的4个运用正则表达式的要领: match()
,replace()
,search()
,split()
这四个要领悉数挪用RegExp的实例的要领。
3 u润饰符
ES6对正则表达式添加了u润饰符,寄义为“Unicode形式”,用来准确处理大于\uFFFF的Unicode字符;
/^\uD83D/u.test('\uD83D\uDC2A')
// false
/^\uD83D/.test('\uD83D\uDC2A')
// true
一旦加上u润饰标记,就会修正下面这些正则表达式的行动:
点字符
点(.)字符不能辨认码点大于0xFFFF的Unicode字符,必需加上u润饰符。
var s = '?';
/^.$/.test(s) // false
/^.$/u.test(s) // true
Unicode字符示意法
大括号示意Unicode字符,只需加上u才辨认
/\u{61}/.test('a') // false
/\u{61}/u.test('a') // true
/\u{20BB7}/u.test('?') // true
量词
运用u润饰符后,一切量词都邑准确辨认大于码点大于0xFFFF的Unicode字符。
/a{2}/.test('aa') // true
/a{2}/u.test('aa') // true
/?{2}/.test('??') // false
/?{2}/u.test('??') // true
预定义形式
u润饰符也影响到预定义形式
/^\S$/.test('?') // false
/^\S$/u.test('?') // true
i润饰符
有些Unicode字符的编码差别,然则字型很邻近,比方,\u004B与\u212A都是大写的K。
/[a-z]/i.test('\u212A') // false
/[a-z]/iu.test('\u212A') // true
4 y润饰符
除了u润饰符,ES6还为正则表达式添加了y润饰符,叫做“粘连”(sticky)润饰符。
y润饰符的作用与g润饰符相似,差别之处在于,g润饰符只需盈余位置中存在婚配便可,而y润饰符确保婚配必需从盈余的第一个位置最先,这也就是“粘连”的涵义。
var s = 'aaa_aa_a';
var r1 = /a+/g;
var r2 = /a+/y;
r1.exec(s) // ["aaa"]
r2.exec(s) // ["aaa"]
r1.exec(s) // ["aa"]
r2.exec(s) // null
5 sticky属性
示意是不是设置了y润饰符
6 flags属性
// ES5的source属性
// 返回正则表达式的正文
/abc/ig.source
// "abc"
// ES6的flags属性
// 返回正则表达式的润饰符
/abc/ig.flags
// 'gi'
7 RegExp.escape()
字符串必需转义,才作为正则形式。
function escapeRegExp(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&');
}
let str = '/path/to/resource.html?search=query';
escapeRegExp(str)
// "\/path\/to\/resource\.html\?search=query"
上面的代码和垫片模块regexp.escape都可以https://github.com/ljharb/regexp.escape