es6对正则的扩展

前言: 请你熟悉基本的正则表达式之后再来看此文章

首先回一下正则的定义方法

  • 正则的定义
	let regExp = new RegExp('xyz', 'i');
	// 等价于
	let regExp = /xyz/i;
	

如上,创建了一个正则构造函数,第一个参数是匹配的字符串,第二个参数为修饰符

还有一种是参数可以直接是正则表达式

	let regExp = new RegExp(/xyz/i);
	// 等价于
	let regExp = /xyz/i;

但是,这样写了之后,你的参数在es5中就不能写第二个参数了,否则报错。

es6恰巧完善了该写法、

	let regExp = new RegExp(/syz/igm, 'i')

此时前面的(igm)修饰符就会被第二个参数,(i)修饰符替换掉

  • 字符串的正则方法

    match()、replace()、search()、split()

    这四个方法,都定义在正则对象上

     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]
    
  • 新增的U修饰符

    含义就是unicode模式,用来处理大于/uFFFF的Unicode字符,会正确处理四个字节的Utf-16编码

	let str = '\uD83D\uDC2A';
	// 四个字节的utf-16
	let reg = /^\uD83D/u;
	let oldReg = /^\uD83D/;
	reg.test(str);
	// false; 
	oldReg.test(str);
	// true;
	

es5中不支持四个字节的UTF-16,会识别为2个字符,导致不加u的正则匹配为true。
加了就会识别为一个字符,所以加了u修饰符的为false。

一旦加了u修饰符就会更改一些正则的行为

  1. 点字符

    点(.)在正则中表示除了换行以外任意单个字符,对于码点大于0xFFFF点字符不能识别,必须加上u修饰符

	let s = '𠮷';

	/^./.test(s);
	// false
	/^./u.test(s);
	// true
  1. unicode表示法

    es6新增大括号表示unicode字符,这种在正则中必须使用u修饰符,否则会被识别为量词

	/\u{61}/.test('a');
	// false
	/\u{
   61}/u.test('a');
	// true
	/\u{
   20BB7}/u.test('𠮷');
	// true
	

如果上面的u{61}不加u修饰符,程序就会认为这是匹配了61个连续的u

  1. 量词

    使用u修饰符,程序都会识别大于0xFFFF的unicode编码

	/a{2}/.test('aa');
	// true
	/a{
   2}/u.test('aa');
	// true
	/𠮷{
   2}/.test('𠮷𠮷');
	// false
	/𠮷{
   2}/u
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值