ES6中Unicode的改动 正则和字符串的变动 codePointAt

二、字符串与正则表达式 javascript正则表达式,ES6正则表达式 阅读详情

ES6中Unicode的改动

早期,由于储存空间宝贵,Unicode使用16位二进制来储存文字,我们将一个16位的二进制编码叫做一个码元(Code Unit)。
后来由于技术的发展,Unicode对文字编码进行了扩展,将某些文字扩展到了32位(占用两个码元),并且,将某个对应的二进制数字叫做码点(Code Point)。


	//此时就产生了一个问题
	//在这里我写了一个字符串这个字是一个生僻字读ji
	const text = '吉';
	
	//而我在这里用.length的方法来测试字符串的长度
	console.log('字符串长度:', text.length);
	//用正则表达式来检索看看能不能检索到
	console.log('使用正则测试:', /^.$/.text(text));

而结果是
在这里插入图片描述
???
不应该对吧,字符串长度应该为1
正则表达式应该是能检索到字符串的啊,应该是为ture

那是因为现在有些文字要占用两个码元,有的文字占用一个码元,而js在很早之前1999年的时候已经有10年没有更新了一个语言有10年没有更新是多么可怕的一件事啊。所以在当时的语法中他认为一个码元就对应一个文字而有的文字实际上是占用了两个码元就会导致这样的结果发生。

所以就会出现字符串的长度是2因为它占用了两个码元,正则匹配时也是因为匹配的是两个码元所以匹配不到。

那么ES6中能不能改动这些呢,能!但是不敢,因为他不敢保证以前的一些旧系统都能兼容。虽然在ES6中还没有改但是他折中了一下。

在ES6中为了解决这个困扰,为字符串提供了方法:codePointAt

	
	//以前能够做到的
	console,log('得到第一个码元', text.charCodeAt(0).toString(16));//  \ud842  55362
	console,log('得到第二个码元', text.charCodeAt(1).toString(16));//  \udfb7  57271
	
	//现在
	console.log('得到第一个码点:', text.codePointAt(0));
	//他会读取第一个码元,看,这占用的不止一个码元会把下一个码元也读取出来所以会输出一个完整的编码
	console.log('得到第二个码点:', text.codePointAt(1));
	//能不能读出来呢,能,但是他看着一半的编码因为不是第一个码元所以会将第二个码元原封不动的输出

同时ES6为正则表达式添加了一个flag: u,如果添加了该配置,则匹配时使用码点来匹配。


	console.log('使用正则测试:', /^.$/u.text(text));

那么我们可以用它来干什么呢

比如说我们遇到了一个需求需要去测试一个字符串中的长度那么这个字符串中刚好有这样的生僻字,导致了字符串长度的测量不准南无我们就可以利用此方法来测试


/**
 * 判断字符串char,是32位,还是16位
 * @param {*} char 
 */
function is32bit(char, i) {
    //如果码点大于了16位二进制的最大值,则其是32位的
    return char.codePointAt(i) > 0xffff;
}

/**
 * 得到一个字符串码点的真实长度
 * @param {*} str 
 */
function getLengthOfCodePoint(str) {
    var len = 0;
    for (let i = 0; i < str.length; i++) {
        //i在索引码元
        if (is32bit(str, i)) {
            //当前字符串,在i这个位置,占用了两个码元
            i++;
        }
        len++;
    }
    return len;
}

console.log("𠮷是否是32位的:", is32bit("𠮷", 0))
console.log("ab𠮷ab的码点长度:", getLengthOfCodePoint("ab𠮷ab"))

这就是这ES6中Unicode的一些改东西希望对你有用

从solidworks导出URDF模型 一、下载sw_urdf_exporter插件 ROS目前提供了SolidWorks转URDF的插件,叫做sw_urdf_exporter,从http://wiki.ros.org/sw_urdf_exporter下载sw2urdfSetup.exe文件,下载后点击安装,安装完成后就能在solidworks中导出URDF模型了。 二、创建solidworks模型 下面以较为简单的四轮小车为例进行说... 阅读详情

相关推荐

手把手教你用UNet实现轨道缺陷检测(附RSDDs数据集下载与完整代码)

本文详细介绍了如何使用UNet模型实现轨道缺陷检测,包括RSDDs数据集的下载与处理、UNet架构的改进与优化、训练策略设计以及模型部署的全流程。通过实战案例,展示了如何利用深度学习技术提升工业质检效率,特别适合从事工业缺陷检测和图像处理的开发者参考。

dapp9builder的博客 749

day14 ES6(let、const、this、bind、箭头函数、解构赋值、字符串扩展方法)

一、Let let等价于var,也是用来声明变量的 let的特点: 1,变量必须先定义后使用 2,变量不能重复定义 3,块级作用域:在该块的范围内才能使用该变量,且该变量不会消失 4,暂时性死区:当内部变量与外部变量同名时,内部变量屏蔽外部变量 二、const const修饰的变量为只读变量 1,变量只能读不能改 2,被conset修饰的变量必须被初始化 3,必须先定义后使用 4,不能重复定义 5,块级作用域 规定:只读变量名通常全部大写 三、this this:函数的内置对

serendipitymm的博客 157

【收藏向】模拟电子技术超强知识点总结 20小时不挂科

模电真的有难度的一门课,一定要好好学… 用的教材是华科康华光版,其他版本教材也可参考,内容是差不多的。 话不多说直接上思维导图干货(后有思维导图高清原图链接) 1 绪论 2 运算放大器 3 二极管及其基本电路 4 场效应管及其放大电路 5 双极结型三极管及其放大电路 三种组态总结看不清,给个特写 发现虽然csdn上传的是原图,但是显示的图片不是特别清晰,在此贴出B站知乎地址,第五章之后的内容都在上面,还可以查看原图 ———————————————————— B站专栏地址(可以点击查看原图) htt

工科狗Niko的博客 1万+

unicode中含有双码元字符串的截取

Char[] cc = "

jimil的专栏 1618

OpenCV实战:用C++和Python实现亚像素边缘检测(附完整代码)

本文详细介绍了使用OpenCV实现亚像素边缘检测的技术,通过C++和Python双语言代码解析,提升工业测量和医学影像中的检测精度。文章涵盖算法原理、核心实现步骤及工业应用案例,帮助开发者掌握亚像素精度处理技术,解决高精度场景中的边缘检测难题。

beer8的博客 375

基于STM32+华为云设计的智慧农业灌溉系统(2023升级版)(158)

本项目设计一种基于STM32的智慧农业监测系统。该系统能够检测空气温度、湿度、光强度和土壤湿度等关键指标,并自动调节浇水量,实现作物生长环境的精细化管理。同时,本项目还支持本地LCD屏幕数据显示和通过ESP8266上传数据到华为云物联网平台,同时搭建流媒体服务器实现摄像头远程监控。最重要的是,本项目将利用Qt开发Android手机APP,使用户可以远程查看监测情况,了解农作物生成情况。

1万+

JavaScript字符串操作方法大全(ES6新增)

一、codePointAt() let s = '

你好瘦 370

OpenClaw人人养虾:发现与传输

客户端需要先"发现"Gateway 的地址和端口,才能建立连接。OpenClaw 支持多种发现(Discovery)和传输(Transport)机制。

王国平的博客 572

ES6 入门教程 5 字符串的新增方法 5.1 String.fromCodePoint() & 5.2 String.raw() & 5.3 实例方法:codePointAt()

ES6 入门教程 5 字符串的新增方法 5.1 String.fromCodePoint() & 5.2 String.raw() & 5.3 实例方法:codePointAt()

代码改变世界 518

LDO 上电过冲的根因

LDO在上电瞬间常出现短时过冲电压(3.4V-3.5V),可能损坏敏感器件。其根本原因是:低

硬核科技 293

EXCEL VBA从入门到精通 前言

本书通过丰富的实例和案例,帮助读者更好地理解和应用Excel VBA编程,同时也介绍了常用的工具、资源、社区和协作平台等,方便读者进行进一步的学习和开发。我强烈推荐这本书给所有希望学习和掌握Excel VBA编程的读者。多样化的资源和工具介绍:本书介绍了丰富的工具和资源,包括官方文档、在线教程、代码库、论坛、博客等,方便读者进行进一步的学习和开发。详细的讲解和丰富的示例:本书从语法和对象开始讲解,通过丰富的实例和案例,帮助读者更好地理解和应用Excel VBA编程。第一节:什么是VBA 5。

1728

JavaScript字符串长度[String].length以及码元[Code Point]和码点[Code Unit]出现的问题的详解

JavaScript字符串长度[String].length以及码元[Code Point]和码点[Code Unit]的详解码元,码点出现的问题码元(Code Point):我们将一个==16位==的二进制编码叫做一个码元码点(Code Unit):我们将某个==文字对应的二进制数字==叫做码点由于码元,码点产生的问题---[string].length运行代码打印出: ==1 true...

一只勤劳的二哈的博客 1031

深入理解 SAP HANA 上的查询处理机制:从 CDS 分层建模到执行计划落地

本文探讨了S/4HANA系统中CDS视图性能问题的本质及其优化策略。文章指出,性能问题往往源于数据模型、查询编译和执行计划的综合影响,尤其在多层CDS视图叠加时表现更为明显。通过分析SAP HANA查询处理链路的四个关键阶段(SQL Plan Cache、SQL Front End、SQL Optimizer和Execution Plan),揭示了CDS视图性能波动的根本原因。文章强调,优化CDS性能需要关注数据规模、谓词选择性和执行计划稳定性,建议使用参数化查询、合理分层视图结构,并利用PlanViz等工

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4819

16进制 es6_ES6 对unicode的支持

Chrome 内置抓包工具Block requests截取长图代码的覆盖率分析Make site betterES5只支持\uffff(65535)以内的unicode比如你写"\u22000" //在unicode中对应为生僻字:????但是最后展示为:"∀0"。结论:JavaScript 内部,字符以 UTF-16 的格式储存,每个字符固定为2个字节。对于那些需要4个字节储存的字符(Unicode ...

weixin_39932181的博客 233

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ES6 字符串和正则表达式(三)

更好的Unicode支持 早期,由于存储空间宝贵,Unicode使用16位二进制来存储文字。我们将一个16位的二进制编码叫做一个码元(Code Unit)。 后来,由于技术的发展,Unicode对文字编码进行了扩展,将某些文字扩展到了32位(占用两个码元),并且,将某个文字对应的二进制数字叫做码点(Code Point)。 ES6为了解决这个困扰,为字符串提供了方法:codePointAt,根据字符串码元的位置得到其码点。 同时,ES6为正则表达式添加了一个flag: u,如果添加了该配置,则匹配时,使用码

lzDevastator的博客 264

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ES6 字符串和正则的的扩展

1.字符串的扩展 (1)字符串的遍历器接口 for ...of for (let codePoint of "foo") { console.log(codePoint); } //"f" //"o" //"o" (2)JSON.stringify() 的改造 根据标准,JSON数据必须是 UTF-8 编码。但是现在的 JSON.stringify()方法可能返回不符合 UTF-8 标准的编码 JSON.stringify()的问题在于,它可能返回 0xD800到0xDFFF之间的.

JMisagirl的博客 304

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Javascript的字符串String的编码之unicode的处理

首先确定的是Ecmascript使用的是一种UTF-16的编码,但是这种编码却不是标准的UTF-16编码的处理方式。 前言 unicode 2.0引入了utf-16编码,unicode3.0更精确的定义UTF-16编码。 参考:https://iamzero.blog.youkuaiyun.com/article/details/113123384 1999年ES3.0发布,该版本的Ecmascript直接规定了String类型的编码使用UTF-16,但是对String依然按照单个code unit

lengye7的博客 4206

ES6的字符串与正则表达式

目录 1.Unicode支持 2.新增字符串API 3.正则中的粘连标记 4.模板字符串 1.Unicode支持 早期由于存储资源有限,Unicode使用16位二进制来存储文字,我们将一个16位二进制编码叫做一个码元(code unit)。 后来由于技术的发展,Unicode对文字编码进行了扩展,将某些文字扩展到了32位(占用了两个码元)【例1-1】,并且将某个文字对应的二进制数字...

桃花扇的博客 655

【深入理解ES6】字符串和正则表达式

字符串(String)是JavaScript6大原始数据类型。其他几个分别是Boolean、Null、Undefined、Number、Symbol(es6新增)。

m0_62811051的博客 1129

ES6--字符串新增的方法

ES6--字符串新增的方法一、子串的识别(1)includes():返回布尔值,判断是否找到参数字符串。(2)startsWith():返回布尔值,判断参数字符串是否在原字符串的头部。(3)endsWith():返回布尔值,判断参数字符串是否在原字符串的尾部。二、字符串重复--repeat()三、字符串补全(1)padStart:返回新的字符串,表示用参数字符串从头部(左侧)补全原字符串。(1)padEnd:返回新的字符串,表示用参数字符串从尾部(右侧)补全原字符串。四、String.fromCodePo.

赵佳敏的博客 1163

ES6——5.字符串的新增方法

0xFFFF上面代码中,如果方法有多个参数,则它们会被合并成一个字符串返回。String。

chtazycdf的博客 597

ES6(字符串的扩展)

ES6 加强了对 Unicode 的支持,并且扩展了字符串对象。codePointAt()JavaScript 内部,字符以 UTF-16 的格式储存,每个字符固定为 2...

frontend_frank的博客 224

ES6 字符串的扩展

字符的Unicode表示法 JavaScript允许采用\uxxxx形式表示一个字符,其中“xxxx”表示字符的码点。 "\u0061" // "a" codePointAt() JavaScript内部,字符以UTF-16的格式储存,每个字符固定为2个字节。对于那些需要4个字节储存的字符(Unicode码点大于0xFFFF的字符),JavaScript会认为它们是两个字符。 var s =...

默茉的博客 181

ECMAScript6(二)字符串和正则表达式

系列文章目录 第一章 块级作用域绑定 第二章 字符串和正则表达式 文章目录系列文章目录前言二、字符串和正则表达式1. 最好的Unicode支持、UTF-162. codePointAt()3. String.fromCodePoint()4. normalize()【国家化应用开发常用】5. 正则表达式u修饰符、y修饰符5.1 u修饰符5.2 y修饰符6. 其他字符串变更6.1 子串识别6.2 repeat()7. 正则表达式的复制8. flag属性9. 模板字面量总结 前言 本文主要介绍了ES

yan_danfeng的博客 565

ES6--字符串的扩展

字符的Unicode表示法 1、Unicode表示法:\uxxxx(四字节UTF-16编码),xxxx表示字符的Unicode码点。范围是0000~FFFF,超出此范围使用两个双字节表示。 自己的理解:\uxxxx是字符的Unicode表示法,0xxxxx,是字符的16进制Unicode码点。 codePointAt() 1、Javascript内部,字符以UTF-16的格式存储,每个字符2个字节...

ClassicSong的博客 330

ES6 字符串&正则表达式

目录 第二章 字符串和正则表达式UTF-16码位codePointAt()方法String.fromCodePoint()方法normalize()方法正则表达式u修饰符其他字符串变更字符串中的字串识别repeat()方法其他正则表达式语法变更y修饰符正则表达式的复制flags属性模板字面量基础语法多行字符串字符串占位符标签模板定义标签原始值 第二章 字符串和正则表达式 UTF-16码位 在UTF...

weixin_30641999的博客 207
上一篇: ES6 const概述,声明常量
下一篇: ES6更多的字符串的API
苟盛
博客等级 码龄7年 13粉丝 34原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值