ES6 字符串&正则表达式
目录 第二章 字符串和正则表达式UTF-16码位codePointAt()方法String.fromCodePoint()方法normalize()方法正则表达式u修饰符其他字符串变更字符串中的字串识别repeat()方法其他正则表达式语法变更y修饰符正则表达式的复制flags属性模板字面量基础语法多行字符串字符串占位符标签模板定义标签原始值
第二章 字符串和正则表达式
UTF-16码位
在UTF-16中,前216均以16位的编码单元表示,这个范围被称作基本多文种平面(BMP, Basic Multilingual Plane)。超出这个平面的码位则要归属于某个辅助平面(supplementary plane)。
UTF-16引入了代理对(surrogate pair),规定用两个16位编码单元表示一个码位。也就是说,字符串里的字符有两种,一种是由一个编码单位16位表示的BMP字符,另一种是由两个编码单元32位表示的辅助平面字符。
codePointAt()方法
这个方法接受编码单元的位置,而非字符串位置作为参数,返回与字符串中给定位置对应的码位,即一个整数值。
要检测一个字符占用的编码单元数量,可以调用该方法。
function is32Bit (c) {
return c.codePointAt(0) > 0xFFFF;
}
String.fromCodePoint()方法
使用codePointAt()方法检索一个字符的码位,使用String.fromCodePoint()方法根据执行的码位生成一个字符。可以看作完整版的String.fromCharCode()。
normalize()方法
- 规范的等效是指无论从哪个角度来看,两个序列的码位都是没有区别的。
- 兼容性,两个互相兼容的码位序列看起来不同,但是在特定的情况下可以被互相交换使用。
normalize(str, type?)方法用于提供Unicode的标准化形式,同时可以接受一个可选参数来指明标准:
- 以标准等价方式分解,然后以标准等价方式重组(“NFC”),默认选项
- 以标准等价方式分解(“NFD”)
- 以兼容等价方式分解(“NFKC”)
- 以兼容等价方式分解,然后以标准等价方式重组(“NFKD”)
需要注意,在进行字符串的排序和比较操作前,将被操作字符串按照同一标准进行标准化。
正则表达式u修饰符
当一个正则表达式添加了u修饰符,它就从编码单元操作模式切换为字符模式,如此一来正则表达式就不会视代理对为两个字符,从而完全按照预期正常运行。例如(/^.$/u).test(str)。
使用这种方式可以计算码位的数量,解决length不能反映码位数量的问题:
function codePointLength (str) {
// 使用\s\S来确保能匹配新行
const result = str.match(/[\s\S]/gu);
return result? result.length : 0;
}
检测其支持性:
function hasRegExpU () {
try{
var pattern = new RegExp('.', 'u');
return true;
} catch (err){
return false;
}
}
其他字符串变更
字符串中的字串识别
- includes()方法,如果在字符串中检测到指定文本则返回true,否则返回false。
- startsWith()方法,如果在字符串的起始部分检测到指定文本则返回true,否则返回false。
- endsWith()方法,如果在字符串的结束部分检测到指定文本则返回ture,否则返回false。
它们都有第二个可选参数,表示匹配起始点的索引值。注意endWith()是从后向前索引的。
repeat()方法
repeat()接受一个number参数,表示重复的次数,返回值是当前字符串重复一定次数后的新字符串。
其他正则表达式语法变更
y修饰符
它会影响正则表达式搜索过程中的sticky属性,当在字符串中开始字符匹配时,它会通知搜索从正则表达式的lastIndex属性开始进行,如果在指定位置没能成功匹配,则停止继续匹配。可以通过访问正则表达式的sticky属性来确定这个表达式是否使用了y。
当执行操作时,y操作符会把上次匹配后面一个字符的索引保存在lastIndex中;如果该操作匹配的结果为空,则lastIndex会被重置为0。g修饰符的行为与此相同。
需要注意,只有调用exex()和test()的时候才会涉及lastIndex属性,调用字符串的方法,如match(),就不会触发粘滞行为。
正则表达式的复制
在ES5中,var re2 = new RexExp(re1, 'i')对原有正则表达式的修饰符进行修改会报错,但是ES6支持这种方式。
flags属性
source属性获取正则表达式文本,ES6新增的flags属性获取修饰符。
模板字面量
ES6通过模板字面量的形式填补了一些特性:
- 多行字符串:一个正式的多行字符串概念
- 基本的字符串格式化:将变量的值潜入字符串的能力,${param}形式
- HTML转义:向HTML插入经过安全转换后的字符串的能力
基础语法
模板字面量使用反撇号来实现,在内部使用反撇号时可以加上转义符号。
多行字符串
ES5中的做法是换行符\n来指示换行。
ES6的模板字面量支持直接换行书写。其所有空白符都属于字符串的一部分,需要注意缩进。
字符串占位符
使用${param}的形式,将任何合法的JavaScript表达式嵌入到占位符中,并将其作为字符串的一部分输出到结果中。它可以访问作用域中所有可访问的变量。
let count = 10,
price = 0.25,
message = `${count} items cost ${(count * price).toFixed(2)}.`;
标签模板
定义标签
标签可以是一个函数,调用时传入加工过的模板字面量各部分数据。第一个参数是一个数组,包含JS解释过后的模板字面量字符串,它之后的所有参数都是每一个占位符的解释值。它可以执行对模板字面量内容的一系列处理。
function tag (literals, ...substitutions) {
let result = '';
// literals.length === substitutions.length + 1
for (let i = 0; i < substitution.length; i++) {
result += literals[i];
result += substitutions[i];
}
// 处理最后一个literal
return result += literals[literals.length - 1];
}
message = tag`${count} items cost ${(count * price).toFixed(2)}.`;
原始值
literals.raw属性可以访问字符转义被转换成等价字符前的原生字符串。
ES6 字符串&正则表达式的更多相关文章
- ES6字符串和正则表达式改动
1. ES6字符串变更 (1)includes() 方法,如果在字符串中检测到指定文本返回true,否则返回false (2)startsWith()方法,如果在字符串的起始部分检测到文本,则返回tr ...
- java 正则匹配空格字符串 正则表达式截取字符串
java 正则匹配空格字符串 正则表达式截取字符串 需求:从一堆sql中取出某些特定字符串: 比如配置的sql语句为:"company_code = @cc and project_id = ...
- ES6字符串方法
ES6字符串提供三个函数确定一个字符串是否包含在另一个字符串中,分别是includes().startsWith().endsWith(),这三种方法都返回一个布尔值. includes()方法表示是 ...
- es6 字符串的扩展和数值的扩展
es6字符串的扩展 1. es6新增的一些方法 1.1 includes 判断是否包括在内,返回一个 true or false 1.2 statsWith 判断是否以什么开头,返回一个 true o ...
- Excel数据导入PG库,字符串正则表达式
1.Excel数据导入到PG库的某张表中:先将Excel文件转换为CSV格式,打开SQL Shell(psql),连接数据库(输入server,database,Port,username),然后再执 ...
- ES6字符串操作讲解(详细),字符串编码表,代码单元,码点的详细介绍。
以前用到字符串的方法时候,并不会深刻的去思考其中的原理,所以在es6新增的这些方法里就有点蒙圈了,于是想要搞清楚为什么会新增这些方法,以及如何使用这些方法. 在博客园上看见一篇大神SamWeb的总结, ...
- ES6字符串模板
这里做个简单的拓展,之前做vue组件时,经常用到拼接字符串,换行时用到\,既费时又麻烦.这里介绍个ES6字符串模板方法 旧版拼接(各种换行拼接) Vue.component('obj-prop',{ ...
- es6 字符串 对象 拓展 及 less 的语法
es6 字符串 对页面渲染的几种方式:字符串拼接 文档碎片 dom操作 模板 es6 又提供了一种新的对页面渲染的方式:字符串模板(高级版的字符串拼接) 模板字符串标识符是 反引号 ( `` ) 英文 ...
- ES6笔记-正则表达式和字符串正则方法
RegExp构造函数 在ES5中,RegExp构造函数的参数有两种情况. 第一种情况是,参数是字符串,这时第二个参数表示正则表达式的修饰符(flag). var regex = new RegExp( ...
随机推荐
- django admin 编辑页面(change page) 自定义字段, 展示数据
最近遇到一个需求, 需要在django 的 admin 编辑页内展示由用户上传的进行反馈的图片, 还要支持点击查看原图, 所以需要在编辑页内自定义 img 标签及 a 标签进行图片的展示及点击跳转 i ...
- classpath环境变量解惑
只有使用低于JDK1.5版本的JDK时,才需要设置classpath环境变量. 因为早期版本的JDK没有设计在当前路径下搜索Java类的功能,而且编译和运行java程序时还需要JDK的lib路径下的d ...
- pl/sql的tnsnames.ora文件配置
位置:D:\app\product\11.2.0\dbhome_1\network\admin\tnsnames.ora(根据安装位置具体情况而定) zx_U= (DESCRIPTION = ...
- npm执行gulp提示编译错误
script如下 "test":"gulp --gulpfile test.js" 运行 npm run test ,提示编译错误 解决办法如下: 增加scri ...
- 【java异常】 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.emptech.db.demo.mapper.master.MOmQuotaTBMapper.findOmQuotaTB
<mapper namespace="com.emptech.db.demo.mapper.master.MOmQuotaTBMapper"> public inter ...
- 【java异常】定时任务异常ERROR 20604 --- [ scheduling-1] o.s.s.s.TaskUtils$LoggingErrorHandler : Unexpected error occurred in scheduled task
2019-11-20 13:20:00.006 ERROR 20604 --- [ scheduling-1] o.s.s.s.TaskUtils$LoggingErrorHandler : Unex ...
- The happy secret to better work,https://www.ted.com/talks/shawn_achor_the_happy_secret_to_better_work/transcript#t-100352
When I was seven years old and my sister was just five years old, we were playing on top of a bunk b ...
- IE和火狐的事件机制有什么区别
1.IE的事件流是冒泡流,火狐支持冒泡流和捕获流. 2.阻止事件冒泡:IE---e.cancelBubble = true; 火狐---e.stopPropagation();
- 【斜率优化】【P5468】 [NOI2019]回家路线
Description 给定 \(n\) 点,这 \(n\) 个点由 \(m\) 班列车穿插连结.对于第 \(i\) 班列车,会在 \(p_i\) 时刻从 \(x_i\) 站点出发开向 \(y_i\) ...
- 遍历List 中 Map 的值
实现思路: List list = new ArrayList(); Map map = new HashMap(); ;i<list.size;i++){ map=list.get(i); f ...