ECMAScript6 新特征——“正则的扩大”

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

    原文作者:JS菌
    原文地址: https://segmentfault.com/a/1190000004756123
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞