文本

JS 的文本使用 string 类型,它表示 16-bit 字符的序列。string 的长度代表 16-bit 字符的数量。

JS 使用 UTF-16 编码字符集,string 为一系列无符号 16-bit 数值。最常用的 Unicode 字符(来自 Basic Multilingual Plane 基本多语种平面的字符)的码点用一个 16-bit 表示足矣。有的 Unicode 字符码点超过 16-bit,按照 UTF-16 编码规则,需用两个 16-bit 字符表示,称之为代理对(surrogate pair)。

这就意味着,长度为 2 的 string,有时候表示的是一个 Unicode 字符。比如:

var p = 'π' // π 是一个字符,码点为 0x03c0
var e = '𝑒' // 𝑒 是两个字符,码点是 0x1d452
p.length    // => 1
e.length    // => 2, UTF-16 编码是两个 16-bit 数值:"\ud835\udc52"

JS 的转义字符

转义字符 / 能赋予普通字符新的含义。除了常见的 \n, \t 外,\x XX 表示两个 16 进制字符 XX 代表的 Latin-1 字符。\u XXXX 表示 4 个 16 进制字符 XXXX 代表的 Unicode 字符。

'\xA9'      // => ©
'\u03c0'    // => π

处理字符串

JS 内置了很多字符串处理函数,比如:

var s = 'hello, world'
s.charAt(0)
s.charCodeAt(0)
s.substring(1, 4) // 起始位置到结束位置
s.slice(1, 4)     // 起始位置到结束位置,位置可以是负数
s.indexOf('l')    // => 2
s.indexOf('l', 3) // => 3

正则表达式

JS 可以使用 RegExp() 构造函数,也可以使用字面量 /regexp/ 创建正则表达式。

RegExp 和 string 定义了很多模式匹配的方法:

var text = 'testing: 1, 2, 3'
var pattern = /\d+/g
pattern.exec(text)  // => ['1', index:9, input: 'testing: 1, 2, 3']
pattern.test(text)      // => true
text.search(pattern)    // => 9, 第一个匹配位置
text.match(pattern)     // => ['1', '2', '3']
text.replace(pattern, '#')  // => 'testing: #, #, #'
text.split(/\D+/)   // => ['', '1', '2', '3']

results matching ""

    No results matching ""