目录 第二章 字符串和正则表达式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 字符串&正则表达式的更多相关文章

  1. ES6字符串和正则表达式改动

    1. ES6字符串变更 (1)includes() 方法,如果在字符串中检测到指定文本返回true,否则返回false (2)startsWith()方法,如果在字符串的起始部分检测到文本,则返回tr ...

  2. java 正则匹配空格字符串 正则表达式截取字符串

    java 正则匹配空格字符串 正则表达式截取字符串 需求:从一堆sql中取出某些特定字符串: 比如配置的sql语句为:"company_code = @cc and project_id = ...

  3. ES6字符串方法

    ES6字符串提供三个函数确定一个字符串是否包含在另一个字符串中,分别是includes().startsWith().endsWith(),这三种方法都返回一个布尔值. includes()方法表示是 ...

  4. es6 字符串的扩展和数值的扩展

    es6字符串的扩展 1. es6新增的一些方法 1.1 includes 判断是否包括在内,返回一个 true or false 1.2 statsWith 判断是否以什么开头,返回一个 true o ...

  5. Excel数据导入PG库,字符串正则表达式

    1.Excel数据导入到PG库的某张表中:先将Excel文件转换为CSV格式,打开SQL Shell(psql),连接数据库(输入server,database,Port,username),然后再执 ...

  6. ES6字符串操作讲解(详细),字符串编码表,代码单元,码点的详细介绍。

    以前用到字符串的方法时候,并不会深刻的去思考其中的原理,所以在es6新增的这些方法里就有点蒙圈了,于是想要搞清楚为什么会新增这些方法,以及如何使用这些方法. 在博客园上看见一篇大神SamWeb的总结, ...

  7. ES6字符串模板

    这里做个简单的拓展,之前做vue组件时,经常用到拼接字符串,换行时用到\,既费时又麻烦.这里介绍个ES6字符串模板方法 旧版拼接(各种换行拼接) Vue.component('obj-prop',{ ...

  8. es6 字符串 对象 拓展 及 less 的语法

    es6 字符串 对页面渲染的几种方式:字符串拼接 文档碎片 dom操作 模板 es6 又提供了一种新的对页面渲染的方式:字符串模板(高级版的字符串拼接) 模板字符串标识符是 反引号 ( `` ) 英文 ...

  9. ES6笔记-正则表达式和字符串正则方法

    RegExp构造函数 在ES5中,RegExp构造函数的参数有两种情况. 第一种情况是,参数是字符串,这时第二个参数表示正则表达式的修饰符(flag). var regex = new RegExp( ...

随机推荐

  1. mysql解析binlog日志

    binlog日志用于记录所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句.语句以“事件”的形式保存,它描述数据更改.因为有了数据更新的binlog,所以可以用于 ...

  2. 总结:几种生成html格式测试报告的方法

    写自动化测试时,一个很重要的任务就是生成漂亮的测试报告. 1.用junit或testNg时,可以用ant辅助生成html格式: <target name="report" d ...

  3. HashMap和HashTable本质性的区别

    一,HashMap 1.HashMap是键值对key-value形式双列集合.它的底层存储原理是哈希表. 2.对应HashMap采用哈希表存储键值对元素的方式. HashMap.put(key,val ...

  4. UNIX网络编程卷1 - >环境搭建(ubuntu16.04)

      学习unp网络编程,树上的例子均存在#include“unp.h”,故需要对环境进行配置. 1.到资源页下载www.unpbook.com 2.解压并将unpv13e移动到相应的文件夹下 (因为我 ...

  5. 箭头函数的this指向

    es6的箭头函数中this指向是跟普通function中的this指向不同的,普通function的this指向取决于调用function的对象, 而箭头函数的this指向取决于声明它的对象,看下面这 ...

  6. 使用webpack.optimize.CommonsChunkPlugin提供公共代码

    在webpack4里使用webpack.optimize.CommonsChunkPlugin时,报错,webpack4删除了常用的 CommonsChunkPlugin ,提示我们用config.o ...

  7. terminal使用kubectl.exe delete pod podname删不掉

    今天通过kubernetes的dashboard进行删除有问题或者重启次数太多的pod,发现删不掉,然后就在本地尝试使用terminal进行删除 先获取指定namespace下的所有的pod,根据st ...

  8. Java 并发系列之三:java 内存模型(JMM)

    1. 并发编程的挑战 2. 并发编程需要解决的两大问题 3. 线程通信机制 4. 内存模型 5. volatile 6. synchronized 7. CAS 8. 锁的内存语义 9. DCL 双重 ...

  9. CF1208F Bits And Pieces

    CF1208F Bits And Pieces 传送门 思路 这里要运用SOS-DP的思路(\(\text{Sum over Subsets}\)).我在另外一篇博客里介绍过,如有需要可以搜索一下我的 ...

  10. NamedParameterJdbcTemple与RowMapper实现

    NamedParameterJdbcTemplate和JdbcTemplate功能基本差不多. 1.配置 db.properties 1 jdbc.user=root 2 jdbc.password= ...