正则表达式 unicode修饰符及兼容性

原创
01/18 23:22
阅读数 21

ES6 对正则表达式添加了u修饰符,含义为“Unicode 模式”,用来正确处理大于\uFFFF的 Unicode 字符。

示例

/^\uD83D/u.test('\uD83D\uDC2A')

上面代码可以被babel转译以支持低版本浏览器

/^(?:\uD83D(?![\uDC00-\uDFFF]))/.test("\uD83D\uDC2A");

在ES6中正则对象还增加了flags属性和unicode属性,可以获取到是否有unicode修饰符。

var a = /^\uD83D/u;
console.log(a.flags); 
console.log(a.unicode); 

然而,如果使用babel,转译后的代码将无法正确获取flags和unicode了。

此时有2种解决方案:

  1. 使用正则的polyfill
  2. 在管理上禁止使用flags和unicode属性,以及禁止使用new创建正则对象

由于业界并没有一个正则的polyfill可以用,使用正则的polyfill不但要替换原生RegExp类,还要替换原生String类的match、replace、split方法。不符合尽量使用原生功能的原则。因此建议在管理上禁止使用flags和unicode属性,以及禁止使用new创建正则对象。

通过eslint插件可以禁止开发者使用flags和unicode属性,以及禁止使用new创建正则对象。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部