本文主要是介绍ES6笔记 13.正则方法、修饰符yus、UTF_16编码方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
正则修饰符
修饰符
全局 global;-g
大小写 ignoreCase;-i
是否以多行模式执行模式匹配 mutli-line;-m
ES6 正则扩展
- 声明正则的方式变化
// ES5 字面量定义正则
var reg1 = /xyz/i;
// ES5 声明正则
var reg2 = new RegExp("xyz", "i");
// ES5 传参的形式
var reg3 = new RegExp(/xyz/i);
// ES6 传参的形式,支持表达式和修饰符分开传入
var reg4 = new RegExp(/xyz/, "i");
- 字符串方法移动到正则中
- 正则修饰符的扩展 u y s
- global(g):全局匹配;
- ignoreCase(i):忽略大小写
- multiline(m):多行匹配
- sticky(y):粘连匹配
修饰符 y,sticky 粘连的意思,与全局匹配相似,与全局匹配 g(global)的唯一区别就是必须匹配连续的字符,也就是匹配第一个值要粘连第二个值(两个值相同),不然返回 null;
var str = "aaa_aa_a";
var reg1 = /a+/g;
var reg2 = /a+/y;console.log(reg1.exec(str)); // aaa
console.log(reg2.exec(str)); // aaaconsole.log(reg1.exec(str)); // aa
console.log(reg2.exec(str)); // null
- unicode(u):识别码点匹配
- JS 字符串编码格式的知识
JS 中字符串以一定的编码的方式进行储存,以 UTF-16 编码方式进行储存;
英文是 1 个字符等于 1 个字节表示
汉字是 1 个字符等于 2 个字节表示
特殊字符是 1 个字符等于 4 个字节表示
1 个字节 = 8 位 byte - 码点的概念
UTF-16 编码方式属于 Unicode 的一部分,Unicode 的每一个区可以存放 2*16 次方的字符,字节数对应编码数是 8 位,也就是 22222222 的形式;Unicode 一共分为 17 个平面,最前面的一个平面叫做(BMP)对应 16 进制的码点范围:U+0000 – U+FFFF;常用的字符都储存在第一个平面内部; - 特殊字符
可能一些特殊的字符和汉字在 16 进制码点的最大范围 U+0000 – U+FFFF 无法表示,此时 2 个字节可能表示不了特殊的字符或者汉字,此时采用 4 个字节(00|00 00|00),码点的范围是 U+D800 – U+FFFF; - JS 引擎和浏览器只能够通过 UTF-16 编码方式解析 2 个字节的编码格式;
UTF-16 并不存在下面这种编码方式,JS 引擎和浏览器并不能够解析特殊字符或者汉字;
// 错误表示方法
console.log("\u20bb7");// 正确表示方法
console.log("\u{20bb7}"); // {}表示特殊字符或者特殊汉字
console.log("\uD842\uDFB7"); // 特殊字符或者特殊汉字,通过4个字节表示一个字符;
- 修饰符 unicode 作用,对于特殊字符或者特殊汉字时,ES5 中并不能够准确的识别出特殊汉字并且进行匹配的 bug,而 ES6 正则的 unicode 修饰符就将对于编码方式进行优化;
console.log(/^\uD83D/.test("\uD83D\uDC2A")); // true
console.log(/^\uD83D/u.test("\uD83D\uDC2A")); // false
- 区分量词和编码方式,通过\u 标识符进行区别量词和编码方式的区别;
console.log(/a{2}/.test("aa")); // 量词
console.log(/a{2}/u.test("aa")); // 量词
console.log(/\u{20bb7}/u.test("𠮷")); // 字符
- dotAll(s):匹配一切字符
ES5 中(.)修饰符,能够匹配除了\r(U2020)\n(U2029)以外的所以任意字符,但是超出 UTF-16 编码最大范围的字符,并不能匹配
ES2018 中的正则修饰符 s,代表能够匹配任意字符,包括超出 UTF-16 最大编码范围的字符;
var s = "\uD842\uDFB7"; // 超出UTF-16编码最大返回
console.log(/^.$/.test(s)); // false// ES5
console.log(/foo.bar/.test("foo\nbar")); // false// ES2018
console.log(/foo.bar/s.test("foo\nbar")); // true
source 和 flags
获取正则表达式的主体和修饰符
console.log(reg.source); // 正则主体
console.log(reg.flags); // 修饰符
rce 和 flags
获取正则表达式的主体和修饰符
console.log(reg.source); // 正则主体
console.log(reg.flags); // 修饰符
这篇关于ES6笔记 13.正则方法、修饰符yus、UTF_16编码方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!