ES6 字符串&正则表达式

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

第二章 字符串和正则表达式

UTF-16码位

在UTF-16中,前2^16^均以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属性可以访问字符转义被转换成等价字符前的原生字符串。

原文地址:https://www.cnblogs.com/gaogao999/p/11097570.html

时间: 2024-11-09 05:15:01

ES6 字符串&正则表达式的相关文章

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

1. ES6字符串变更 (1)includes() 方法,如果在字符串中检测到指定文本返回true,否则返回false (2)startsWith()方法,如果在字符串的起始部分检测到文本,则返回true,否则返回false (3)endsWith()方法,如果在字符串的结束部分检测到文本,则返回true,否则返回false 以上方法都接收两个参数,一个是要检测的文本,第二个参数是可选的,也即检索开始的位置,在第三个方法中,从字符串长度减去这个索引值的位置开始匹配 (4)repeat()方法,接

es6 字符串String的扩展

ES6给字符串带来了很多实用性的扩展:模板字符串,标签模板,repeat函数.includes函数,startsWith函数,endsWith函数,codePointAt函数,String.fromCodePoint函数,String.raw函数. es6 字符串String的扩展:http://www.cnblogs.com/whybxy/p/7274461.html

java HTML字符串正则表达式使用工具类

原文:java HTML字符串正则表达式使用工具类 代码下载地址:http://www.zuidaima.com/share/1550463453416448.htm HTML相关的正则表达式工具类 包括过滤HTML标记,转换HTML标记,替换特定HTML标记 package com.zuidaima.common.util; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * <p> * Title: H

ES6: 字符串的扩展

1.字符的 Unicode 表示法 Javascript 允许采用 \uxxxx 形式表示一个字符,其中"xxxx"表示一个字符的码点 但是,这种表示法只限于 \u0000 -- \uffff 之间的字符.超出这个范围的字符,必须用两个双字节的形式表达 上面代码表示,如果直接在"\u"后面跟上超过 0xFFFF 的数值(比如 \u20bb7),Javascript会理解成 "u\20bb+7".由于 \u20bb 是一个不可打印字符,所以只会显示

ES6字符串扩展

前面的话 字符串是编程中重要的数据类型,只有熟练掌握字符串操作才能更高效地开发程序.JS字符串的特性总是落后于其它语言,例如,直到 ES5 中字符串才获得了 trim() 方法.而 ES6 则继续添加新功能以扩展 JS 解析字符串的能力.本文将详细介绍ES6中字符串扩展 子串识别 自从 JS 引入了 indexOf() 方法,开发者们就使用它来识别字符串是否存在于其它字符串中.ES6 包含了以下三个方法来满足这类需求:includes().startsWith().endsWith() [inc

es6字符串方法

用来确定字符串A是否包含字符串B,ES6有提供了三种新方法: 需要注意的是,这三个方法都接受第二个参数-一个数字n.前两个均表示从第n个开始查询,而,endsEith()是指针对前n个字符. repeat() 将原字符串重复n次. 字符串对象,一共有四个方法可以使用正则表达式:match().replace().search().split(). 原文地址:https://www.cnblogs.com/yadiblogs/p/9025946.html

ES6字符串操作

Unicode编码,指的是Unicode编码字符集,所谓的编码字符集指的是Unicode会为每一个字符分配一个唯一的数字,从而形成的一张映射表格,其中这个唯一的数字也称之为码点(code point) .例如"严"字在Unicode中对应的码点是U+0x4E25. 代码单元(code unit), 是编码字符集进入到计算机的世界才出现的概念.因为编码字符集只是一张映射表格,它就放到哪里,计算机中怎么使用这张表格, 说白了,就是在计算机中怎么表示这些唯一的数字(码点)? 因为计算机中全是

在Xcode中找中文字符串(正则表达式)

中文字符串的正则表达式:    (@"[^*]*[\u4E00-\u9FA5]+[^*\n]*?")\s*

es6字符串拼接

1.以前,js多行字符串用\n写起来比较费事,所以最新的ES6标准新增了一种多行字符串的表示方法,用` ... `表示 旧版写法 alert("你好,\n 我叫\n Olive"); es6写法 alert(`你好 我叫 olive`);//注意这里的两个点是键盘上数字键1左边的按键,而不是单引号哦 2.以前,把多个字符串连接起来,可以用+号连接 var name ="olive"; var age= 26; var message='hello,my name i