字符串和正则表达式

Wednesday, August 21, 2019

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

字符串

更好的 unicode 支持,unicode 引入扩展字符集后,16 位不满足需求,utf-16 引入了”代理对“,允许使用两个 16 位码表达单个码点,字符可以用一个码元或两个码元来表示。

两个码点表示的字符,length 为 2,charAt() charCodeAt())方法无法正确返回,因为单独一个码元不表示可打印字符

codePointAt() 接受码元位置,返回完整码点,若接受的码点的第二个码点的位置,则返回该码点的值(与 charAt 相同)。

String.fromCodePoint() 根据码点返回字符

normalize() 字符串标准化(用于比较时)

includes() 文本存在返回 true,反之 false

startWith()文本出现在起始处 true,反之 false

endsWith() 文本出现在结尾处 true,反之 false

以上三种方法均可指定第二个参数(索引位置),endWith 索引位置是参数减去(-)字符串长度。

repeat() 重复字符串,参数为重复次数

正则表达式

u 标志,加入 u 标志后工作模式切换为针对字符

var text = "𠮷";

console.log(text.length);           // 2
console.log(/^.$/.test(text));      // false
console.log(/^.$/u.test(text));     // true

y 标志,第一次匹配成功后,从 lastIndex 的位置开始第二次匹配,如该位置没有匹配成功,则停止检索。

复制正则表达式,允许覆盖标志。

var re1 = /ab/i,

    // ES5 中会抛出错误, ES6 中可用
    re2 = new RegExp(re1, "g");

获取正则表达式字符串

var re = /ab/g;

console.log(re.source);     // "ab"
console.log(re.flags);      // "g"

模板字面量

语法,使用反引号(`)包裹字符串,反引号需要转义。

模板字面量支持多行(回车)字符串,空格字符,也可以使用换行符\n。

替换位,${内容},内容允许放入任意 js 表达式,允许嵌套。

let count = 10,
    price = 0.25,
    message = `${count} items cost $${(count * price).toFixed(2)}.`;

console.log(message);       // "10 items cost $2.50."

标签化模板,对模板字面量进行转换

function passthru(literals, ...substitutions) {
    // 需return 返回一个字符串
}
let count = 10,
    price = 0.25,
    message = passthru`${count} items cost $${(count * price).toFixed(2)}.`;

literals 数组,首元素为空字符串(""),中间元素为替换位间的字符串,最后元素为最后替换位后的字符串。

substitutions 数组,元素为依次的替换量。

substitutions.length === literals.length - 1

    message2 = String.raw`Multiline\nstring`;

返回原始值(包括\n)。