ES6重修系列(2)

字符串和正则表达式

字符串

《深入理解ES6》中对于ES6编码的介绍内容不是很多,只需要知道相比于ES5,ES6引入了代理对,也就是说使用两个16位的编码单元表示一个码位,在处理一些生僻字而言时可能需要注意一下,但是笔者在写博客的时候,输入法无法打出书中的例子,而且个人感觉确实在实际生产中用处不是很大,就不详细介绍了。

normalize()方法

在对于多种语言的时候,可能会需要用到normalize()方法,前面也提到对于一些生僻文字,会引入代理对来编码(2个16位),而一般的字符都是16位的,在处理排序等业务的时候,需要注意一下编码顺序。

string.normalize([form])
  • NFC:规范化形式Canonical Composition。

  • NFD:规范化形式规范分解。

  • NFKC:标准化形式兼容性组合物。

  • NFKD:规范化形式兼容性分解。

其实感觉实际操作中基本上用不到,可忽略

正则表达式

《深入理解ES6》中对于正则表达式的介绍主要是介绍相比于ES5的新特性,对于没有基础的同学而言不是很友好。而且这些新特性实用性有限,就不按照书上的来整理了。

没有基础的同学可以先去菜鸟教程上学习一下正则表达式的基础。

ECMAScript通过RegExp类型来支持正则表达式。

创建正则表达式的方法有两种

// 1. 方法一
var expression = / pattern / flags;
// 2. 方法二
var expression = new RegExp('\d', 'g');

其中的模式(pattern)部分为正则表达式。每个正则表达式都可以带有一或多个标志,用以标明正则表达式的行为。

  • g:表示全局模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止
  • i:表示不区分大小写,记载确定匹配项时忽略模式与字符串的大小写。
  • m:表示多行模式,即在到达一行文本末尾时会继续查找下一行中是否存在与模式匹配的项。

语法

元字符

字符 描述
\ 将下一个字符标记为特殊字符|原义字符|向后引用|八进制转义符
^ 匹配输入字符串的开始位置
$ 匹配输入字符串的结束位置
* 匹配前面的子表达式零次或多次,等价于{0,}
+ 匹配前面的子表达式一次或多次,等价于{1,}
? 匹配前面的表达式,等价于{0,1};当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。
. 匹配出换行符\n \r之外的任何单个字符
|
[] 字符集合
[^abc] 负值字符集合,非
{} 匹配前面子表达式的次数,例如{n},{n,},{n,m}

转义字符

字符 描述
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
\cx 匹配由 x 指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
\d 匹配一个数字字符。等价于 [0-9]。
\D 匹配一个非数字字符。等价于 [ ^0-9]。
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [ ^\f\n\r\t\v]。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。
\w 匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'。
\W 匹配非字母、数字、下划线。等价于 '[ ^A-Za-z0-9_]'。
\xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,'\x41' 匹配 "A"。'\x041' 则等价于 '\x04' & "1"。正则表达式中可以使用 ASCII 编码。
\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匹配两个连续的相同字符。
\n 标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。
\nm 标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。
\nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。
\un 匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, \u00A9 匹配版权符号 (?)。

优先级

运算符 描述
\ 转义符
(), (?: ), (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, \任何元字符、任何字符 定位点和序列(即:位置和顺序)
| 替换,"或"操作 字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food"。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。

RegExp 对象属性

属性 描述
global RegExp 对象是否具有标志 g。
ignoreCase RegExp 对象是否具有标志 i。
lastIndex 一个整数,标示开始下一次匹配的字符位置。
multiline RegExp 对象是否具有标志 m。
source 正则表达式的源文本。

RegExp 对象方法

方法 描述
compile 编译正则表达式。
exec 检索字符串中指定的值。返回找到的值,并确定其位置。
test 检索字符串中指定的值。返回 true 或 false。

支持正则表达式的 String 对象的方法

方法 描述
search 检索与正则表达式相匹配的值。
match 找到一个或多个正则表达式的匹配。
replace 替换与正则表达式匹配的子串。
split 把字符串分割为字符串数组。

未完待续

猜你喜欢

转载自www.cnblogs.com/njuclc/p/12897732.html