继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

正则表达式学习笔记(5)- ES6新增及参考链接

Ryn_xiao
关注TA
已关注
手记 21
粉丝 70
获赞 513

注:摘自阮一峰老师的《ECMAScript 6 入门》

5. ES6新增

  • 构造函数可以添加第二个规则参数
// es5添加第二个参数时会报错
var regex = new RegExp(/test/, 'i');

// es6
var regex = new RegExp(/test/, 'ig');
regex.flags; // ig
  • 添加了u修饰符,含义为"Unicode"模式,用来正确处理大于\uFFFF的Unicode字符。
// \uD83D\uDC2A会被es5认为是两个字符,加了u之后就会被认定为一个字符
/^\uD83D/u.test('\uD83D\uDC2A'); // false
/^\uD83D/.test('\uD83D\uDC2A');  // true

u字符对正则表达式行为造成的影响,具体参考阮一峰的《ECMAScript 6入门》

  • 添加了y修饰符(粘连修饰符),全局匹配,但必须从剩余字符串的第一个位置进行匹配。
var str = 'aaa_aa_a',
    reg1 = /a+/g,
    reg2 = /a+/y;

reg1.exec(str); // aaa
reg2.exec(str); // aaa

reg1.exec(str); // aa
// 第二次执为null,是因为剩余字符串为_aa_a,必须从头部开始匹配,因此没有匹配到规则`a+`
// 若将reg1和reg2修改为`/a+_/g`和/a+_/y,结果将相同
reg2.exec(str); // null
  • 增加了RegExp实例属性sticky,表示是否设置了y标志
var r = /test/y;
r.sticky;   // true
  • 增加了RegExp实例属性flags,表示正则表达式的修饰符
var r = /test/ig;
r.flags;   // gi
  • 构造函数增加方法RegExp.escape(),表示对字符串转义,用于正则模式
RegExp.escape('The Quick Brown Fox');
// "The Quick Brown Fox"

RegExp.escape('Buy it. use it. break it. fix it.');
// "Buy it\. use it\. break it\. fix it\."

RegExp.escape('(*.*)');
// "\(\*\.\*\)"
  • 增加修饰符s,可以使得.可以匹配任意单个字符,包括行终止符(\n,\r,U+2018,U+2029)
const re = /foo.bar/s;
// 另一种写法
// const re = new RegExp('foo.bar', 's');

re.test('foo\nbar') // true
re.dotAll // true
re.flags // 's'
  • 支持后行断言,具体参看断言所讲

  • Unicode属性类

目前,有一个提案,引入了一种新的类的写法\p{...}和\P{...},允许正则表达式匹配符合Unicode某种属性的所有字符。

// 匹配所有数字
const regex = /^\p{Number}+$/u;
regex.test('²³¹¼½¾') // true
regex.test('㉛㉜㉝') // true
regex.test('ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ') // true

6. 参考资料

  • 书籍

《JavaScript Ninja》

《JavaScript高级程序设计(第三版)》

《JavaScript权威指南》

  • 链接

http://blog.csdn.net/u012047933/article/details/38365541

http://www.cnblogs.com/iyangyuan/archive/2013/05/30/3107390.html

http://blog.csdn.net/yuzhongzi81/article/details/45582319

http://www.cnblogs.com/tugenhua0707/p/5037811.html

ECMAScript 6 入门

打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP