ES6笔记 13.正则方法、修饰符yus、UTF_16编码方式

2023-12-07 11:50

本文主要是介绍ES6笔记 13.正则方法、修饰符yus、UTF_16编码方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

正则修饰符

修饰符
全局 global;-g
大小写 ignoreCase;-i
是否以多行模式执行模式匹配 mutli-line;-m

ES6 正则扩展

  1. 声明正则的方式变化
// 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");
  1. 字符串方法移动到正则中

image.png

  1. 正则修饰符的扩展 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):识别码点匹配
  1. JS 字符串编码格式的知识
    JS 中字符串以一定的编码的方式进行储存,以 UTF-16 编码方式进行储存;
    英文是 1 个字符等于 1 个字节表示
    汉字是 1 个字符等于 2 个字节表示
    特殊字符是 1 个字符等于 4 个字节表示
    1 个字节 = 8 位 byte
  2. 码点的概念
    UTF-16 编码方式属于 Unicode 的一部分,Unicode 的每一个区可以存放 2*16 次方的字符,字节数对应编码数是 8 位,也就是 22222222 的形式;Unicode 一共分为 17 个平面,最前面的一个平面叫做(BMP)对应 16 进制的码点范围:U+0000 – U+FFFF;常用的字符都储存在第一个平面内部;
  3. 特殊字符
    可能一些特殊的字符和汉字在 16 进制码点的最大范围 U+0000 – U+FFFF 无法表示,此时 2 个字节可能表示不了特殊的字符或者汉字,此时采用 4 个字节(00|00 00|00),码点的范围是 U+D800 – U+FFFF;
  4. JS 引擎和浏览器只能够通过 UTF-16 编码方式解析 2 个字节的编码格式;
    UTF-16 并不存在下面这种编码方式,JS 引擎和浏览器并不能够解析特殊字符或者汉字;
// 错误表示方法
console.log("\u20bb7");// 正确表示方法
console.log("\u{20bb7}"); // {}表示特殊字符或者特殊汉字
console.log("\uD842\uDFB7"); // 特殊字符或者特殊汉字,通过4个字节表示一个字符;
  1. 修饰符 unicode 作用,对于特殊字符或者特殊汉字时,ES5 中并不能够准确的识别出特殊汉字并且进行匹配的 bug,而 ES6 正则的 unicode 修饰符就将对于编码方式进行优化;
console.log(/^\uD83D/.test("\uD83D\uDC2A")); // true
console.log(/^\uD83D/u.test("\uD83D\uDC2A")); // false
  1. 区分量词和编码方式,通过\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编码方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/465764

相关文章

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

在Linux终端中统计非二进制文件行数的实现方法

《在Linux终端中统计非二进制文件行数的实现方法》在Linux系统中,有时需要统计非二进制文件(如CSV、TXT文件)的行数,而不希望手动打开文件进行查看,例如,在处理大型日志文件、数据文件时,了解... 目录在linux终端中统计非二进制文件的行数技术背景实现步骤1. 使用wc命令2. 使用grep命令

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

XML重复查询一条Sql语句的解决方法

《XML重复查询一条Sql语句的解决方法》文章分析了XML重复查询与日志失效问题,指出因DTO缺少@Data注解导致日志无法格式化、空指针风险及参数穿透,进而引发性能灾难,解决方案为在Controll... 目录一、核心问题:从SQL重复执行到日志失效二、根因剖析:DTO断裂引发的级联故障三、解决方案:修复

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

C++ 检测文件大小和文件传输的方法示例详解

《C++检测文件大小和文件传输的方法示例详解》文章介绍了在C/C++中获取文件大小的三种方法,推荐使用stat()函数,并详细说明了如何设计一次性发送压缩包的结构体及传输流程,包含CRC校验和自动解... 目录检测文件的大小✅ 方法一:使用 stat() 函数(推荐)✅ 用法示例:✅ 方法二:使用 fsee